Windows身份基础 - 注销或更新声明

时间:2011-11-07 14:09:09

标签: c# wif

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

当用户登录时,我正在使用他的请求中的某些信息进行索赔。 一切正常,但现在我需要管理这个场景:

  1. 用户已登录,身份验证并且拥有有效令牌。
  2. 但是用户决定再次浏览(通过来自其他网站的重定向)
  3. 所以他的请求中的信息不同。
  4. 我想要
    • 签下他 - 这样他就可以自然地用他的新信息创建一个新的令牌
    • 或更新现有的令牌。
  5. 所以我的问题是:

    1. 如何退出Windows Identity基础?
    2. 或如何更新现有声明?
    3. 我试过这段代码:

        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));
          }
      

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

      非常感谢。

1 个答案:

答案 0 :(得分:8)

基本上签出就是删除cookie所以:

FormsAuthentication.SignOut

FederatedAuthentication.SessionAuthenticationModule.SignOut

FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie

会奏效。

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