OWIN身份验证,使当前令牌失效并删除co​​okie

时间:2014-12-02 14:55:51

标签: c# authentication owin

我有一个用于身份验证的OWIN中间件。我们有两种类型的身份验证。 第一种类型是使用以下配置的承载令牌

var OAuthOptions =  new OAuthAuthorizationServerOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ExternalBearer,
        TokenEndpointPath = new PathString("/Token"),
        Provider = new ApplicationOAuthProvider(PublicClientId),
        AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
        AllowInsecureHttp = true,
        AccessTokenFormat = new SecureTokenFormatter(GetMachineKey())
    };

第二种类型使用外部登录的身份验证cookie

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ExternalCookie,
    AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive,
    CookieHttpOnly = true,
    CookieSecure = CookieSecureOption.SameAsRequest,
    CookieName = ".AspNet." + DefaultAuthenticationTypes.ExternalCookie,
    ExpireTimeSpan = TimeSpan.FromMinutes(5),
    TicketDataFormat = new SecureTokenFormatter(GetMachineKey())
});

当用户退出时,我们实际发出两个退出

Request.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);

Request.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ExternalBearer);

对于第一个,我希望看到从浏览器中删除.AspNet.ExternalCookie Cookie,但事实并非如此。 对于第二个,我希望我的令牌失效,而User.Current.Identity = null,这不是。

所以我怎么做 1)以物理方式注销当前会话的当前标识? 2)从浏览器中删除外部Cookie?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,经过3天的搜索,我找到了asnwer(有点......)。

在您的注销中尝试这些代码行中的一个(并且只有一个)。 (他们都为我工作,但是我使用的是第一个,但是越多越好,对吗?)

Request.GetOwinContext().Authentication.SignOut();

Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);

HttpContext.Current.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);

这个问题在本文中有详细描述,但它没有提供可行的解决方案(至少对我来说它没有做到) http://coding.abel.nu/2014/11/catching-the-system-webowin-cookie-monster/