从 NextAuth Okta 提供商获取刷新令牌

Pau*_*eld 5 oauth reactjs okta next.js next-auth

我们有一个现有应用程序使用 NextAuth 与 Okta 进行通信。这一切工作正常,我们刚刚添加了一个需要 Okta 访问令牌的 API,我们在 NextAuth 中使用JWT 回调从帐户对象中获取访问令牌,并将其添加到NextAuth 会话中。

这一切都工作正常,我们可以从会话中获取访问令牌并将其传递给 API,一切都很好,API 验证访问令牌,一切都很好。但是,有时我们回到会话时,对 API 的调用会失败,因为它无法验证访问令牌,因为它已过期。

我正在查看用于轮换刷新令牌的NextAuth 文档,我发现 Okta 有一个用于获取新刷新令牌的端点。这一切似乎都有道理,问题是,查看NextAuth 中的JWT 回调返回的内容,我没有得到刷新令牌,这些是 Okta 提供程序返回的 props。我们得到一个访问令牌和一个 ID 令牌(它们确实包含不同的值),但我们没有得到返回的刷新令牌。

我看到有关刷新令牌的offline_access 范围的参考,我们是否需要在对 Okta 提供程序的调用中设置它?如果是这样,怎么办?否则,是否有人设法在 NextAuth 中使用 Okta Provider 并修复了过期的访问令牌问题?

{
  token: {
    name: ...,
    email: ...,
    picture: .,
    sub: ...
  },
  user: {
    id: ..,
    name: ...,
    email: ...,
    image: undefined
  },
  account: {
    provider: 'okta',
    type: 'oauth',
    providerAccountId: ...,
    token_type: 'Bearer',
    expires_at: ...,
    access_token: ...,
    scope: ...,
    id_token: ...
  },
  profile: {
    sub: ...,
    name: ...,
    email: ...,
    ver: ...,
    iss: ...,
    aud: ...,
    iat: ...,
    exp: ...,
    jti: ...,
    amr: [ ... ],
    idp: ...,
    preferred_username: ...,
    auth_time: ...,
    at_hash: ...
  },
  isNewUser: undefined
}
Run Code Online (Sandbox Code Playgroud)

App*_*ran 5

您可以添加如下范围 \xe2\x80\x98

\n
OktaProvider({\n  clientId: process.env.OKTA_CLIENT_ID,\n  clientSecret: process.env.OKTA_CLIENT_SECRET,\n  issuer: process.env.OKTA_ISSUER,\n  idToken: true,\n  exp: true,\n  authorization: { \n    params: { \n      scope: "openid offline_access" \n    } \n  }\n})\n
Run Code Online (Sandbox Code Playgroud)\n