如何使用JavaScript解密Next-auth的session-token(JWT令牌)
场景与代码实现
我在Next.js应用中使用next-auth管控用户认证,采用CredentialsProvider。先调用登录接口获取用户信息,再将access token存入next-auth的jwt回调返回的token中。
[...nextauth].js代码
const authOptions = { session: { strategy: "jwt", }, providers: [ CredentialsProvider({ type: "credentials", credentials: {}, async authorize(credentials, req) { const { email, password } = credentials; const result = await axios.post( `http://127.0.0.1:5000/user/login`, { email, password, }, { headers: { "Content-Type": "application/json" }, withCredentials: true, } ); return { accessToken: result.data.accessToken, }; }, }), ], callbacks: { async jwt({ user, token }) { if (user?.accessToken) { token.value = user.accessToken; } console.log(token); // ↓ 下方是输出结果 return token; }, }, };
jwt回调输出结果
{ value: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzOTZiMTlhYTczMmUzMzYwMjU2ZjBlMiIsImlhdCI6MTY3NTAyMzEwNSwiZXhwIjoxNjc1MTA5NTA1fQ.5kdPmeLCpwbJBjtzKMhe5QMNEx75ThiDKm75PN0vjoc', iat: 1675023106, exp: 1675109506, jti: 'd9108700-1b5f-4bd3-8d31-0c36f38d9fcb' }
在getServerSideProps中获取session-token
我可以在getServerSideProps里从请求的Cookie中拿到加密后的session-token:
export async function getServerSideProps(context) { console.log(context.req.cookies["next-auth.session-token"]); // ↓ 下方是获取到的令牌内容 return { // 返回内容不影响当前问题 }; }
获取到的加密令牌内容
eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..6ryJ60GPcDLq9aWG.4oWlJbecyWUnbZYJiv6z0eAuFmRFSfEn4fQSlh1FTjlPiiDGZASA4UwqXNEHRpRMG6HRPRDcsUUCHBBzaV8JwCEetgSYJcSrZ5CK_AhyvFKUlKY-TpHSNDnmCI8ZS4y2nV_Xl0NqvMU3vA-D8gXtT5UcOrJLlN5dMe7S9xZo8vhr-gpohcEhKOefUgDjTmMYmBf190OLl0TY599FkJwpoeSFozAwavwbOZGQOxYVbsj3KTibsfE37juyqnDaiV_t59bWroGjz2d5kHLxfkpQB0IKYRnAH8sXbG7dDZUVLT1UQUN_FrjYpkFrQgxC7MmWZtCccQs-FsBXY7EbiYmJKIddpOeN1Q.1kas8bGE_O7IkEDiilxiZw
问题
我希望用JavaScript解密这个令牌,获取其中的value属性(即我的accessToken)并使用它,请问该如何实现?
内容的提问来源于stack exchange,提问作者Ahmed Sbai

