在NextAuth会话中保留访问令牌是否安全?

6kkfgxo0  于 2023-06-29  发布在  其他
关注(0)|答案(1)|浏览(95)

我有一个来自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)
w8f9ii69

w8f9ii691#

我通常也这样做,所以我会说是的,在NextAuth会话中保留访问令牌通常是安全的。NextAuth会话使用JSON Web令牌(JWT)加密。
此外,会话存储是非常安全的位置。出于安全原因,我还将定期轮换令牌,并避免将它们用于身份验证请求以外的目的。

相关问题