当前位置: 首页 > 知识库问答 >
问题:

当访问令牌过期时,如何将Nuxt auth模块(oauth2)中的刷新令牌与key斗篷一起使用

胥智
2023-03-14

Access token(Bearer JWT token)登录后工作成功,但在1-2分钟后Access token过期,axios request返回401 unauthorized,nuxt app有一个刷新token,但如何在nuxt中正确使用它从Keyclope服务更新Access token。这是我的nuxt.config.js

    strategies: {
      keycloak: {
        _scheme: 'oauth2',
        authorization_endpoint: `${process.env.AUTH_URL}/auth/realms/jhipster/protocol/openid-connect/auth`,
        access_token_endpoint: `${process.env.AUTH_URL}/auth/realms/jhipster/protocol/openid-connect/token`,
        scope: [
          'openid',
          'address',
          'email',
          'jhipster',
          'microprofile-jwt',
          'offline_access',
          'phone',
          'profile',
          'roles',
          'web-origins'
        ],
        response_type: 'code',
        grant_type: 'authorization_code',
        token_type: 'Bearer',
        client_id: 'web_app',
        token_key: 'access_token',
        autoLogout: true
      }
    }

共有1个答案

慎星纬
2023-03-14

在过去的一周里,我们遇到了同样的问题,v4.9.1。

在深入研究了源代码之后,很明显,虽然本模块即将推出的v5可能会引入对使用刷新令牌自动刷新访问令牌的支持,但v4似乎没有,尽管存储了刷新令牌。

为了解决这个问题,直到v5有一个稳定的版本,我们创建了一个模块插件。将其添加到项目目录中,并提供给Nuxt Auth插件。

nuxt.config.js中附带的策略配置使用:

...
  grant_type: 'authorization_code',
  response_type: 'code',
  access_type: 'online'
...

(其中grant_type不明显,因为没有记录。)

此外,在Keyclope本身的客户端配置中,我们必须:

  • 禁用隐式流
  • 存取类型设置为"public"
  • 设置Web源以允许来自Nuxt应用程序部署URL的CORS请求,或者如果这些已配置为“有效重定向URI”,则设置

这对我们很有效,当访问令牌过期时从Keycloak捕获401,使用刷新令牌获取新的访问令牌,然后重试原始失败的请求。

(从我对Nuxt Auth repo上报告相同问题的回答中交叉发布。)

 类似资料:
  • google oauth2刷新令牌何时过期? 我所说的过期是指过期是因为经过了某个时间跨度(不是因为用户已撤销访问权限或用户已请求新的刷新令牌) 我做了一些研究,没有一个引用官方的谷歌文档(我也找不到一个有效的谷歌文档) 其他一些问题表示,由于时间,它从未过期: 谷歌刷新令牌过期了吗? https://community.fitbit.com/t5/web-api-development/inva

  • 使用KeyCloak时,访问令牌与用户信息令牌有何不同? 从OAuth2/OpenIDConnect中,我了解到访问令牌提供了用户已经通过身份验证的信息,您需要使用用户信息令牌来获取关于用户及其配置文件/角色等的更多信息。 当我看到访问令牌时https://jwt.io/而不是用户信息令牌。我能够获得与用户配置文件相同的信息 为什么会这样,使用Keycloak时访问令牌与用户信息令牌有何不同?

  • 我不熟悉,它代表。我混淆了它的两个术语:访问令牌和刷新令牌。 用户注册/登录站点后,我创建和。 将刷新标记保存在数据库或cookie中。 15分钟后,用户标记访问令牌过期。 如果用户空闲2小时,我将从cookie或DB中删除刷新令牌,否则我将使用刷新令牌续订访问令牌。 有什么优化的方法可以达到这个目的吗?

  • 我们有一个角度水疗中心,是由OIDC授权使用隐式流。我们使用Keycloak作为我们的授权服务器。访问令牌的寿命很短,并且通过隐藏的iframe定期刷新。 在了解到授权代码流PKCE是授权SPA的新推荐方式后,我们决定切换流。一切正常,但每次我们调用令牌endpoint时,KeyCloak确实会给我们一个刷新令牌(以及Access和ID-Token)。由于没有安全的方法来存储刷新令牌,我们想继续使

  • 当访问Google-Drive时,访问令牌可能过期,我们可以使用刷新令牌获得新的访问令牌。但是,有许多可能的原因,即刷新令牌本身停止工作或过期,请参见: https://developers.google.com/identity/protocols/oauth2#过期 所以我的问题是,如果刷新令牌在6个月后过期了会发生什么,我如何检测它?刷新访问令牌的请求是否在403被禁止的情况下失败,或者返回

  • 当我试图在访问令牌过期之前使用刷新令牌生成访问令牌时,系统会生成一个新令牌,并且一切正常。但是如果访问令牌过期,则请求返回。 中的方法不是使用我从以前的访问令牌中存储在字典中的标识生成访问令牌吗? 如果上一个更新令牌尚未过期,如何阻止客户端使用相同的刷新令牌请求新的访问令牌? oauthProvider.cs: RefreshTokenProvider.cs: 对不起,英语不好,希望你能理解!