如何获取Oidc客户端中的静默令牌的到期时间

问题描述

我有SPA开发的应用程序,用于实现OAUTH身份验证的Oidc-Client如下:

  1. 如何在基于角度结构的项目中使用Web Pack配置文件配置无提示刷新页面,因为在令牌到期时不会调用silent-refresh.html。
  2. 即使生成了静令牌,如何获取/设置静生成令牌的到期时间?

请帮助并提出建议。

解决方法

静音更新

我个人喜好不是通过单独的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。这将传递具有新过期时间的新用户