带有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 混淆

IdentityServer3 绕过同意屏幕

跳过 IdentityServer3 登录屏幕

IdentityServer3 和通过 OpenIDConnect 进行外部登录

IdentityServer3

一步一步学习IdentityServer3 (13) 令牌