Identity Server 4-检查iframe会话问题-OIDC客户端

时间:2018-09-10 15:02:47

标签: redirect identityserver4 logout oidc-client-js

我在我的角度应用程序中使用OIDC Client来针对身份服务器4进行身份验证。一切正常,直到我点击注销。

我已启用监视会话(默认情况下已启用),以便其他浏览器可以检测到注销,并且可以在同一浏览器的其他选项卡中注销用户。当我从一个选项卡中注销时,另一选项卡向身份服务器发出请求以获取静默刷新令牌,并且此请求成功。我希望其他浏览器也能退出。如果我在其他选项卡中按了F5,则可以,它会重定向到再次登录。但不是自动的。

1 个答案:

答案 0 :(得分:0)

更新

要从共享同一身份服务器frontChannel 的其他客户端注销,您可以在身份中添加一个Iframe来通知您的客户端有关注销的信息( oidc-client.js支持前通道注销

  

前通道服务器端客户端

     

要通过前端渠道规范从服务器端客户端应用程序中注销用户,IdentityServer中的“已注销”页面必须呈现,以通知客户端用户已注销。希望收到通知的客户端必须设置FrontChannelLogoutUri配置值。 IdentityServer跟踪用户已登录的客户端,并在IIdentityServerInteractionService(详细信息)上提供一个名为GetLogoutContextAsync的API。此API返回具有SignOutIFrameUrl属性的LogoutRequest对象,您注销的页面必须将该属性呈现为。

     

反向渠道服务器端客户端

     

要通过反向通道规范从服务器端客户端应用程序注销用户,IdentityServer中的SignOutIFrameUrl端点将自动触发服务器到服务器的调用,将已签名的注销请求传递给客户端。这意味着,即使没有前通道客户端,IdentityServer中的“注销”页面也必须如上所述向SignOutIFrameUrl呈现。希望收到通知的客户端必须设置BackChannelLogoutUri配置值。

     

基于浏览器的JavaScript客户端

     

鉴于会话管理规范的设计方式,IdentityServer中没有什么特别的事情需要通知这些客户端用户已经注销。但是,客户端必须在check_session_iframe上执行监视,这是由oidc-client JavaScript库实现的。

此后,您可以在所有客户端中收听 oidc-client 的事件 addUserSignedOut ,并触发 signoutRedirect 以注销您的客户端

this._userManager.events.addUserSignedOut(() => {
    this._userManager
      .signoutRedirect()
       .then(resp => {
         console.log('Success');
       })
       .catch(err => {
         console.log(err);
       });
 });

选中此documentation以获得更多详细信息