.net core 2.0和Identityserver4:注销后Cookie不会过期

时间:2018-08-22 16:24:08

标签: authentication asp.net-core-mvc asp.net-core-2.0 session-cookies identityserver4

我正在将Identityserver4用于所有配置为具有“ AccesssTokenType = 1”(即引用类型)的客户端。

我有一个用于服务器托管的Web应用程序,另外一个用于客户端托管的应用程序。

我使用了默认的Identityserver设置,该设置生成了两个cookie,一个用于会话ID“ idsrv.session”,另一个用于身份验证“ idsrv”。

我要退出登录

        await HttpContext.SignOutAsync(IdentityServerConstants.ExternalCookieAuthenticationScheme);
        await HttpContext.SignOutAsync(IdentityServerConstants.DefaultCookieAuthenticationScheme);

但是当我使用“ idsrv.session”进行调用时却给出了错误 等待HttpContext.SignOutAsync(IdentityServerConstants.DefaultCheckSessionCookieName);

问题/重现问题的步骤

第一次迭代:在我的客户网站上登录,该网站重定向到我的Identityserver应用程序。现在,我使用“ Burp Suite”解释请求和响应。我复制了包含重定向URL和cookie详细信息的完整响应。

我从客户网站注销/注销。

第二次迭代:我尝试再次登录,并通过传递错误的凭据,使用Burp Suite拦截了请求和响应。在截取响应时,我只是复制了先前请求中的cookie(在我的第一次迭代中是成功的),并观察到Identityserver已成功使用cookie值验证了用户,而忽略了此迭代中的错误凭据。

即使我尝试在注销/注销方法中使cookie无效并删除,但是看起来identityserver仍将其识别为有效的cookie。

1 个答案:

答案 0 :(得分:0)

布洛克·艾伦(Brock Allen)指导我找到了正确的解决方案。据他说:

这是您要问的真正问题-当您注销时,即使在被盗和重播的情况下,您也希望cookie不再有效。 IdentityServer无法解决此问题,因为我们使用Microsoft的cookie身份验证来实现登录。您必须通过更改其组件的默认用法来解决此问题。您可以通过实现ITicketStore来实现“服务器端Cookie”(我不喜欢的一个术语):https://github.com/aspnet/Security/blob/master/src/Microsoft.AspNetCore.Authentication.Cookies/CookieAuthenticationOptions.cs#L136

详细信息在这里 https://github.com/IdentityServer/IdentityServer4/issues/2565