4

我正在尝试使用 NextAuth 作为我的项目的身份验证提供程序。我有一个要求,我有基于凭据的登录名/密码。在这种情况下,当我登录时,我必须将用户名/密码传递给自定义 API(例如:abc.com/auth/login)。这个 API 成功后将返回一个 JWT,以便将来进行通信以访问他们的资源。

我从 NextAuth 了解到它维护自己的会话和 JWT(如果未提供数据库)。此功能适用于我的情况,但我必须维护 API 返回给我的 JWT(如上所述)。所以现在有两个 JWT,一个是我从 API 收到的,一个是 NextAuth 创建的。

我的问题:

  • 有没有一种方法可以用来维护从 API 收到的自定义 JWT?
  • 如果 API 令牌已过期以进行调和,有没有办法让我可以终止 NextAuth 会话。
  • 保持 NextAuth 会话和自定义 JWT 令牌同步的最佳方法是什么?

提前致谢!

4

1 回答 1

3

在 Next-auth repo 讨论本身上得到了答案。

这个解决方案对我有用。

因此,我们可以让 next-auth 生成包含与 API 提供的相同有效负载的 JWT 令牌(我们可以在 API 中禁用令牌签名验证)。

然后更新 next-auth 配置,让 cookie 中的保存令牌具有 httpOnly: false ,因此我们可以通过将其添加到配置中来访问令牌服务器和客户端:

const options = {
   // ...
   cookies: { sessionToken: { name: `next-auth.session-token`, options: { httpOnly: false } } },
}

之后,我们可以使用代码获取要从服务器端和客户端传递给 API 调用的 JWT 令牌:

import cookies from 'next-cookies'
import Cookies from 'js-cookie'

// Server-Side
cookies(context)['next-auth.session-token']
// Client-side
Cookies.get('next-auth.session-token')

现在我们只需要弄清楚如何保存我的 API 提供的 JWT 令牌,而不是使用 next-auth 生成的令牌。

然后我们将能够在后端 API 中重新激活签名验证。

您可以在此处关注主题

于 2021-02-09T14:39:38.350 回答