我正在将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。
答案 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