下一个身份验证 + 下一个 JS

时间:2021-01-15 13:47:00

标签: jwt next.js next-auth

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

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

我的问题:

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

提前致谢!

1 个答案:

答案 0 :(得分:2)

在 Next-auth repo 讨论中得到了答案。

这个解决方案对我有用。

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

然后更新 next-auth 配置以在 cookie 中有一个保存令牌 has httpOnly: false 以便我们可以通过在配置中添加它来访问令牌服务器和客户端:

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

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

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 中重新激活签名验证。

您可以关注主题here

相关问题