问题描述
我有SPA开发的应用程序,用于实现OAUTH身份验证的Oidc-Client如下:
请帮助并提出建议。
解决方法
静音更新
我个人喜好不是通过单独的HTML页面,而是通过对index.html页面的无提示令牌续订响应来处理。然后编写如下代码:
if (window.top === window.self) {
// Run the main app
const app = new App();
app.execute();
} else {
// If our SPA is running on an iframe,handle token renewal responses
const app = new IFrameApp();
app.execute();
}
我发现这种方法避免了增加WebPack /构建系统的复杂性。 code for the iframe app除了收到无提示令牌续订响应外,几乎没有其他作用。
EXPIRY
有趣的是为什么要直接使用访问令牌的到期时间。您可以这样获得值:
const user = await this._userManager.getUser();
if (user) {
console.log(user.expires_at);
}
此处的真正要求是确保当API由于访问令牌过期而失败时,避免为最终用户带来错误。最好通过以下操作来处理:
- 如果API调用失败并显示401状态代码
- 然后尝试通常通过userManager.signInSilent()获取新的访问令牌
- 然后使用新的访问令牌重试API调用
因此,调用API的方式应具有一个带有一些重试逻辑的帮助程序类,如我的示例here。
,要在静默刷新后获得通知,请为 userLoaded 添加一个事件处理程序:UserManager.events.addUserLoaded。这将传递具有新过期时间的新用户