【问题标题】:Getting a Refresh Token from NextAuth Okta Provider从 NextAuth Okta 提供程序获取刷新令牌
【发布时间】:2022-08-23 18:29:37
【问题描述】:

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

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

我正在查看 rotating a refresh token 的 NextAuth 文档,我发现 Okta 有一个 getting a new refresh token 的端点。这一切似乎都说得通,问题是,看看 NextAuth 中的JWT callback 返回什么,我没有得到刷新令牌,这些是 Okta 提供者返回的道具。我们得到一个访问令牌和一个 ID 令牌(它们确实包含不同的值),但我们没有得到返回的刷新令牌。

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

{
  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
}
  • 我面临同样的问题。刷新令牌不是帐户对象的一部分

标签: reactjs next.js oauth okta next-auth


【解决方案1】:

您可以添加如下范围'

OktaProvider({
  clientId: process.env.OKTA_CLIENT_ID,
  clientSecret: process.env.OKTA_CLIENT_SECRET,
  issuer: process.env.OKTA_ISSUER,
  idToken: true,
  exp: true,
  authorization: { 
    params: { 
      scope: "openid offline_access" 
    } 
  }
})

【讨论】:

  • 谢谢,这似乎是有道理的 - 希望本周晚些时候我有机会尝试这个,如果它有效,我会将其标记为已接受的答案,再次感谢。
猜你喜欢
  • 2020-12-30
  • 2021-07-21
  • 1970-01-01
  • 2022-11-18
  • 2015-08-27
  • 2021-10-13
  • 2013-03-01
  • 1970-01-01
  • 2021-01-23
相关资源
最近更新 更多