oidc-client-js 令牌刷新期间查询参数不一致

问题描述 投票:0回答:1

我在反应应用程序中的令牌刷新期间遇到处理查询参数的问题。我们使用 oidc-client-js 版本 1.11.5 来管理身份验证。具体来说,当用户第一次打开应用程序时,传递给 UserManager 配置的redirect_uri 会正确用于将导航重定向到适当的路径。然而,当我们需要使用signinRedirect方法刷新令牌时,我们遇到了困难。此方法似乎使用包含旧查询参数的redirect_uri,而在我们的系统中,应用程序查询参数在用户导航期间发生变化。

我们尝试使用signinRedirectCallback(url)方法来解决这个问题,但不幸的是,我们还没有取得积极的结果。问题依然存在,令牌刷新过程仍然依赖于过时的查询参数。

下面是使用 oidc-client 实现的示例。

authService.js

import { UserManager } from 'oidc-client';

const authServiceConfig = {
....

redirect_uri: `${window.location.origin}/callback${window.location.search || ''}`,

....
}

const userManager = new UserManager(authServiceConfig);

auth-context-provider.jsx

 useEffect(() => {    
  .....

    const timeout = setTimeout(() => {
      console.debug('***  Token update');
      setIsLoggedIn(false);
      userManager.signinRedirect();
    }, timeoutDelay);

     ....
  }, [authPayload, search]);
reactjs authentication openid-connect oidc-client-js oidc-client
1个回答
0
投票

令牌刷新可以通过两种方式进行:

  • 在隐藏的 iframe 上运行提示=无的代码流(传统的 SPA 解决方案)

  • 或者使用刷新令牌(如果可用)(尽管传统解决方案避免向浏览器返回刷新令牌)

要解决您的问题,在此处捕获并发布对授权和令牌端点的(经过清理的)请求将很有用。还要说明您正在使用哪个授权服务器。

代码

实现生命周期事件的一种方法如我的代码所示:

您可以顺便在本地运行该代码示例,甚至可以将其配置为指向您自己的授权服务器,作为比较的对象。

文档

这也是我的一篇关于传统 SPA 代币更新解决方案的博客文章

。目前最大的问题是对授权服务器的 SSO cookie 的依赖。该 cookie 通常是第三方的,并且可能被大多数当前浏览器删除。

© www.soinside.com 2019 - 2024. All rights reserved.