带有IdentityServer3的Oidc-client - Angular2,如何正确注销和登录
Posted
技术标签:
【中文标题】带有IdentityServer3的Oidc-client - Angular2,如何正确注销和登录【英文标题】:Oidc-client with IdentityServer3 - Angular2, how to logout and login properly 【发布时间】:2017-05-17 20:57:14 【问题描述】:这里有一些背景,我使用的是隐式流,我的令牌是 JWT。要注销,我使用的是方法调用signoutRedirectCallback。
我希望能够正确注销。这样我就可以以其他用户身份登录。这样做时,我仍然拥有最后一个用户的令牌吗?有没有办法完全注销用户,使其没有最后一个用户的令牌?由于某种原因,令牌仍然存在。似乎真正注销的唯一方法是关闭浏览器页面并且身份服务器3上的cookie被删除/删除?
这也可以回答我的其他问题。如果用户单击主网格页面上的超链接并打开一个新选项卡(例如详细信息页面),如果用户在新选项卡(详细信息页面)上注销,则仍记录主网格页面(旧选项卡)在?同样,我没有完全退出也是同样的问题。
谁能给我一些关于如何正确注销以删除 identityserver3 上的 cookie 的指导?所以它是一个干净的石板。令牌仍然存在。谢谢。
//Here is the code. In my main component I have a menuclick event and this works:
public MenuClick(event, item)
if (item === "signOut")
this.signOut();
public signOut()
this._LoginService.logOut();
//Here is the LoginService that calls the oidc-client method:
public logOutCall(): Observable<boolean>
return Observable.fromPromise(new Promise<boolean> (
resolve =>
this._oidcService.logOut();
resolve(true);
));
this._oidcService.logOut() 调用实际的 oidc-client 方法 signoutRedirectCallback()。这有效并且它重定向。但除非我关闭页面,否则令牌仍然存在。
更新:我的测试团队告诉我这个问题是 Chrome 特有的。
【问题讨论】:
由于某种原因你做的不好,不查看源代码是不可能给你任何建议的。 罗曼,我基本上是调用上面提到的方法,然后重定向到登录页面。 :// 在进行重定向之前使会话无效 如何使会话无效?重定向在 oidc-client 库中自动发生?谢谢。 在 oidc-client 库中自动执行... 【参考方案1】:要清除由 UserManager 管理的状态,请调用 removeUser
。这应该在您触发注销时为您调用,所以我很好奇为什么它不是。检查日志?
【讨论】:
Brock,我已经手动完成了这两项操作,并让 signoutRedirectCallback() 调用 removeUser()。我检查了日志,它调用 removeUser 没有错误。令牌尚未过期,它仍然存在。只有在 Chrome 中令牌仍然存在。 什么类型的令牌? JWT 还是参考? 我们使用的是 JWT。 在主页的初始化中,我还调用了 removeUser,以确保它是一个干净的状态。这似乎也不适用于 Chrome。 :// 所以我确实按照您的建议切换到引用令牌。它适用于api。我登录到客户端网页并获得一个令牌。这是最终用户令牌。然后我转到管理员登录网站,在那里我调用 oidcMgr.removeUser() 来清理所有令牌。当我登录时,我得到了一个新的令牌,它仍然将我识别为原始电子邮件的最终用户?请指教。谢谢。以上是关于带有IdentityServer3的Oidc-client - Angular2,如何正确注销和登录的主要内容,如果未能解决你的问题,请参考以下文章
IdentityServer3 + AzureAD 和 RedirectUri 混淆