【问题标题】:Next Auth + Next JS下一个身份验证 + 下一个 JS
【发布时间】:2021-04-20 13:11:36
【问题描述】:
我正在尝试使用 NextAuth 作为我的项目的身份验证提供程序。我有一个要求,我有基于凭据的登录名/密码。在这种情况下,当我登录时,我必须将用户名/密码传递给自定义 API(例如:abc.com/auth/login)。这个 API 成功后将返回一个 JWT,以便将来访问他们的资源。
我从 NextAuth 了解到它维护自己的会话和 JWT(如果未提供 DB)。此功能适用于我的情况,但我必须维护 API 返回给我的 JWT(如上所述)。所以现在有两个 JWT,一个是我从 API 收到的,一个是 NextAuth 创建的。
我的问题:
- 有什么方法可以用来维护我从 API 收到的自定义 JWT?
- 如果 API 令牌已过期,是否有办法让我可以终止 NextAuth 会话。
- 保持 NextAuth 会话和自定义 JWT 令牌同步的最佳方法是什么?
提前致谢!
【问题讨论】:
标签:
jwt
next.js
next-auth
【解决方案1】:
在 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 } } },
}
之后,我们可以使用代码获取 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的话题