带IdentityServer3的oidc客户端-Angular2 SPA,如何刷新数据访问令牌

带IdentityServer3的oidc客户端-Angular2 SPA,如何刷新数据访问令牌,angular,openid-connect,identityserver3,Angular,Openid Connect,Identityserver3,我正在将oidc-client.js与IdentityServer3一起使用 在这一点上,除了更新访问令牌之外,我的一切都很好。我有一个Angular2 SPA,我正在捕获AccessTokenExpiring事件,并允许用户决定继续工作或注销。注销很容易。然而,我正在为调用哪个userManager方法来刷新我的数据访问令牌而苦苦挣扎。似乎如果我使用signInSilent(),我需要提供一个静默重定向uri,我假设Idsvr将重定向到这个uri,我不希望这样,因为它将从用户当前工作的位置重定

我正在将oidc-client.js与IdentityServer3一起使用

在这一点上,除了更新访问令牌之外,我的一切都很好。我有一个Angular2 SPA,我正在捕获AccessTokenExpiring事件,并允许用户决定继续工作或注销。注销很容易。然而,我正在为调用哪个userManager方法来刷新我的数据访问令牌而苦苦挣扎。似乎如果我使用signInSilent(),我需要提供一个静默重定向uri,我假设Idsvr将重定向到这个uri,我不希望这样,因为它将从用户当前工作的位置重定向。有没有一个我应该做什么的可靠例子


谢谢

在隐式流中更新令牌是通过前端通道(在浏览器下方)重定向用户来完成的。对于JS风格的客户端,没有一种方法可以通过编程实现这一点。

据我所知,
UserManager
signensilent
机制允许在隐藏的iframe中对用户进行身份验证

静默重定向uri应该是处理从IdentityServer返回的令牌的位置

当然,只有当用户在令牌过期时仍然登录到IdentityServer时,这才可以静默工作

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

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

您还可以使用
UserManager.signingpop({data:'Your data here'}
来避免在主窗口中导航离开应用程序。在
popup\u redirect\u uri
中,您可以处理回调并触发新用户的事件,以更新主窗口中的任何UI