带有 IdentityServer3 的 oidc-client - Angular2 SPA,如何刷新数据访问令牌

oidc-client with IdentityServer3 - Angular2 SPA, how to refresh data access token

我正在使用 oidc-client.js 和 IdentityServer3。

我现在一切正常,除了更新访问令牌。我有一个 Angular2 SPA,我正在捕获 AccessTokenExpiring 事件并允许用户决定继续工作或注销。注销很容易。但是,我正在纠结调用哪个 userManager 方法来刷新我的数据访问令牌。似乎如果我使用 signInSilent(),我将需要提供一个静默重定向 uri,我假设 Idsvr 将重定向到,我宁愿没有,因为它会从用户当前工作的地方重定向。有我应该做什么的具体例子吗??

谢谢!!

在隐式流程中更新令牌是通过前端通道(IOW 浏览器)重定向用户来完成的。没有以编程方式为 JS 样式客户端执行此操作的方法。

据我了解,UserManagersignInSilent 机制允许用户在隐藏的 iframe 中进行身份验证。

静默重定向 uri 应该是您处理从 IdentityServer 返回的令牌的地方。

当然,如果用户在令牌过期时仍然登录到 IdentityServer,这只能静默工作。

如果用户已从 IdentityServer 注销,您可以在代码中添加一些逻辑(在静默重定向 uri 时触发)来检测此情况(IdentityServer 将以 error login_required 响应)。 此时您可以在此处或使用 silentRenewError 事件触发正常身份验证。

通过将应用程序状态传递给 UserManager.signinRedirect({data:'Your data here'}),可以在到 IdentityServer 的往返过程中保存应用程序状态。

您也可以使用 UserManager.signinPopup({data:'Your data here'} 来避免离开主 window 中的应用程序。 popup_redirect_uri 可以是您处理回调并触发新用户事件以更新主 window.

中的任何 UI 的地方

oidc-client.js Wiki

Issue which covers signInSilent process