身份服务器 4 中的静默令牌更新,js 客户端应用程序未按预期工作

Posted

技术标签:

【中文标题】身份服务器 4 中的静默令牌更新,js 客户端应用程序未按预期工作【英文标题】:silent token renew in identity server 4 with js client app not working as expected 【发布时间】:2017-09-12 19:17:43 【问题描述】:

我正在使用身份服务器 4 为企业架构中的不同应用提供身份服务。

使用带有 oidc-client.js 的身份服务器 4 应用程序使用隐式流注册了一个 SPA 应用程序,并且正在运行。

但问题在于令牌更新,需要长时间保留用户登录而不要求用户再次登录。

为了实现这一点,使用以下配置实现了静默令牌更新。

var config = 
    authority: "http://localhost:5000",
    client_id: "jswebclient",
    redirect_uri: "http://localhost:5003/callback.html",
    response_type: "id_token token",
    scope: "openid profile api1",
    post_logout_redirect_uri: "http://localhost:5003/loggedout.html",
    automaticSilentRenew: true,
    silent_redirect_uri : "http://localhost:5003/callback.html" ; 

var mgr = new Oidc.UserManager(config);

通过上述配置,自动更新正在发生,但它不是像预期的那样静默更新,正在发生完整的页面重定向到重定向 uri 以处理来自身份服务器的响应。

例如:index.html 是我的实际页面,其中发生静默更新,callback.html 是重定向 uri,index.html 被重定向到 callback.html,然后更新,然后重定向回 index.html,实际网络日志附在下面,

谁能帮我解决这个问题,让静默更新发生。

【问题讨论】:

【参考方案1】:

经过谷歌搜索并参考了很多文章后,我发现了问题,这是与配置有关的问题,将配置更改为以下内容后它就可以工作了

var config = 
    authority: "http://localhost:5000",
    client_id: "jswebclient",
    redirect_uri: "http://localhost:5003/callback.html",
    response_type: "id_token token",
    scope: "openid profile api1",
    post_logout_redirect_uri: "http://localhost:5003/loggedout.html",
    automaticSilentRenew: true,
    silent_redirect_uri: "http://localhost:5003/silentrenew.html"   
;

var mgr = new Oidc.UserManager(config);

创建了一个新的silentrenew.html 页面来处理静默更新响应,并在页面中添加了以下脚本

 <script>
    new Oidc.UserManager().signinSilentCallback();        
 </script>

就是这样......它开始按预期工作。

【讨论】:

silentrenew.html页面不需要OIDC配置信息吗?看起来那只是在 index.html 页面中。 谢谢,它可以工作,但我确实必须在silentrenew.html 页面中包含对oidc-client.js 的调用,当然还要在身份服务器中添加该url 作为授权的重定向URL。根据这个网页scottbrady91.com/OpenID-Connect/…

以上是关于身份服务器 4 中的静默令牌更新,js 客户端应用程序未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

OIDC 客户端 + 身份服务器 4,设置 max_age 静默令牌更新不起作用

ReactJS - 使用 iframe 静默更新令牌

使用刷新令牌 adal azure AD 静默更新访问令牌

使用带有身份服务器 4 的 oidc 客户端进行静默登录

在 .Net Core 中实现刷新令牌功能的最佳位置?

Ember.js 和玩!框架身份验证最佳实践