首页 > 解决方案 > OWIN OpenId 身份验证 - 注销后的活动会话

问题描述

我在我的应用程序中实现了 ASP.Net Cookie 身份验证和 OWIN OpenId 身份验证的混合。我正在尝试修复一个安全漏洞,即使在注销后会话也不会失效。

中间件实现:

app.UseCookieAuthentication(
    新的 CookieAuthenticationOptions
    {
        AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,    
        app.UseOpenIdConnectAuthentication(新的 OpenIdConnectAuthenticationOptions
        {
            客户 ID = 客户 ID,
            权威=权威,
        }
     }
);

注销代码(基于用户类型):

HttpContext.GetOwinContext().Authentication.SignOut(
    OpenIdConnectAuthenticationDefaults.AuthenticationType,
    CookieAuthenticationDefaults.AuthenticationType);
    
HttpContext.GetOwinContext().Authentication.SignOut(
    CookieAuthenticationDefaults.AuthenticationType);

我正在捕获Fiddler中的流量并单击从网页注销。当我尝试从 Fiddler 重新发出请求时,它成功完成并且在 HttpModule 中,它Application.User.Identity.IsAuthenticatedTrue

我有一些问题:-

  1. 这是 Cookie 重放攻击吗?
  2. 我做错了什么,如果不是,我将不得不通过一些黑客来修复它,比如在缓存中存储一​​个 cookie 并进行比较?

标签: c#asp.netasp.net-mvcasp.net-identityowin

解决方案


从您的应用程序中注销时,您也必须从身份服务器中注销。否则,您的应用程序将被重定向到身份服务器,重新进行身份验证并重新登录。检查通知下的以下代码段:

app.UseCookieAuthentication(
    new CookieAuthenticationOptions
    {
        AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,    
        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        {
            ClientId = clientId,
            Authority = authority,
        },
        Notifications = new OpenIdConnectAuthenticationNotifications
        {
            RedirectToIdentityProvider = n =>
            {
                // if signing out, add the id_token_hint
                if (n.ProtocolMessage.RequestType == OpenIdConnectRequestType.LogoutRequest)
                {
                    var idTokenHint = n.OwinContext.Authentication.User.FindFirst("id_token");

                    if (idTokenHint != null)
                    {
                        n.ProtocolMessage.IdTokenHint = idTokenHint.Value;
                    }
                }

                return Task.FromResult(0);
            }
        }
     }
);

您将在此处找到一些 OWIN 中间件设置示例(虽然不是您问题的直接答案)


推荐阅读