我有一个来自Nodejs的自定义API和Expressjs。我正在使用nextAuth在Next.js应用程序中对用户进行身份验证。在登录时,我调用我的登录API路由并将日期保存在nextAuth会话中,并可以通过useSession
钩子访问它。当对受保护的API路由发出api
请求时,我通过header传递保存在next session
中的访问令牌。我还将刷新令牌存储在会话对象中,然后将其保存在本地存储中,用于刷新路由,用于在进行API调用时重新生成访问令牌。这是工作正常。我想知道这对于生产级应用是否安全。
const authOptions: NextAuthOptions = {
session: {
strategy: "jwt",
},
providers:[
CredentialsProvider({
type: "credentials",
credentials: {},
async authorize(credentials, req){
const { username, password } = credentials as {
username: string;
password: string;
};
if(!credentials){
return null
}
const userData = {
username: username,
password: password
}
try {
const response = await axios.post(`${BASE_URL}/login`, userData);
if(response?.data){
const user: jwtDecodedAttributes = jwt_decode(response?.data?.userToken);
console.log(user, userData, 'hey');
return {
id: user.userId,
name: user.username,
role: user.role,
profilepicture: user.profilepicture,
iat: user?.iat,
exp: user?.exp,
username: user?.username,
token: response?.data?.userToken,
email: user.email,
userId: user?.userId,
refresh: response?.data.userRefreshToken
};
}
} catch (error) {
}
return null
}
})
],
pages: {
signIn: "/login",
},
callbacks:{
async jwt({token, user}){
return {...token, ...user} ;
},
async session({session, token, user}){
session.user = token
return session
}
}
};
export default NextAuth(authOptions);
我可以通过以下方式访问我的Next.js应用程序中的数据:
const { status, data } = useSession();
console.log(data?.user.token)
1条答案
按热度按时间w8f9ii691#
我通常也这样做,所以我会说是的,在NextAuth会话中保留访问令牌通常是安全的。NextAuth会话使用JSON Web令牌(JWT)加密。
此外,会话存储是非常安全的位置。出于安全原因,我还将定期轮换令牌,并避免将它们用于身份验证请求以外的目的。