【问题标题】:Windows identity foundation - sign out or update claimsWindows 身份基础 - 注销或更新声明
【发布时间】:2011-11-07 14:09:08
【问题描述】:

我正在使用 Windows Identity Foundation 来管理我们网站的登录。

当用户登录时,我会在他的请求中使用一些信息来提出索赔。 一切正常,但现在我需要管理这种情况:

  1. 用户已经登录、认证并拥有一个有效的令牌。
  2. 但用户决定再次浏览(通过来自另一个站点的重定向)
  3. 所以他请求中的信息是不同的。
  4. 我想要
    • 让他退出 - 这样他自然会用他的新信息创建一个新令牌
    • 或更新他现有的令牌。

所以我的问题是:

  1. 如何退出 Windows Identity Foundation?
  2. 或者如何更新现有声明?

我试过这段代码:

  public void ExpireClaims(HttpContextBase httpContextBase)
    {
        var module =
            httpContextBase.ApplicationInstance.Modules["WSFederationAuthenticationModule"] as
            WSFederationAuthenticationModule;
        if (module == null)
        {
            return;
        }
        module.SignOut(true);
    }

但是模块总是为空。

我试过这个:

  public void FederatedSignOut(string replyUrl)
    {
        WSFederationAuthenticationModule.FederatedSignOut(null, new Uri(replyUrl));
    }

但是当我这样做时,我得到一个空引用执行。

非常感谢。

【问题讨论】:

    标签: c# wif


    【解决方案1】:

    基本上退出只是删除 cookie,所以:

    FormsAuthentication.SignOut

    FederatedAuthentication.SessionAuthenticationModule.SignOut

    FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie

    会起作用的。

    或使用FederatedPassiveSignInStatus(应该在您的工具箱中)。将属性SignOutAction 设置为FederatedSignOut,控件也会清除您的STS 会话。

    【讨论】:

    • 谢谢,很好的回答!我正在使用 FederatedAuthentication.SessionAutheticationModule.SignOut。我注意到仅使用 FormsAuthentication.SignOut 仍然允许用户访问联合站点,而不是您当前所在的站点。还将研究最终选项。再次感谢。
    • 毕竟,上述方法只是将我从当前依赖方中注销。他们没有让我退出所有依赖方。我必须在 sts 中实现我自己的自定义联合登出。这是我另一个问题的链接:stackoverflow.com/questions/8228746/…
    • 另外,我发现一旦创建了令牌,就无法更新声明。从安全的角度来看,这似乎是明智的行为!
    • 是的 - 要获得更新的声明,您必须退出并重新登录。
    猜你喜欢
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多