带有 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 样式客户端执行此操作的方法。
据我了解,UserManager
的 signInSilent
机制允许用户在隐藏的 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 和 IdentityServer3。
我现在一切正常,除了更新访问令牌。我有一个 Angular2 SPA,我正在捕获 AccessTokenExpiring 事件并允许用户决定继续工作或注销。注销很容易。但是,我正在纠结调用哪个 userManager 方法来刷新我的数据访问令牌。似乎如果我使用 signInSilent(),我将需要提供一个静默重定向 uri,我假设 Idsvr 将重定向到,我宁愿没有,因为它会从用户当前工作的地方重定向。有我应该做什么的具体例子吗??
谢谢!!
在隐式流程中更新令牌是通过前端通道(IOW 浏览器)重定向用户来完成的。没有以编程方式为 JS 样式客户端执行此操作的方法。
据我了解,UserManager
的 signInSilent
机制允许用户在隐藏的 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.