개발자
안녕하세요 next auth로 소셜로그인을 구현중입니다. 따로 spring boot 서버가 있는 상태이구여. 궁금한점이 있습니다. 1. 소셜로그인 완료 시 account에 들어있는 accessToken과 refreshToken을 아래와 같은 코드로 빼낸 뒤 서버에 보내서 일반적인 jwt방식으로 구현을 하려고 합니다. 하지만 token들이 jwt형식이 아니라 ' . ' 구분없이 하나의 문자열로 나옵니다. jwt토큰 형태로 바꾸는 방법이 따로 있나요? 아니면 이와 같은 방식은 잘못된 방식인건가요?? ``` session: { jwt: true, }, callbacks: { async jwt({ token, account, profile, user }: any) { if (account && user) { token.accessToken = account.access_token; token.refreshToken = account.refresh_token; token.id = profile.id; } return token; }, async session({ session, token, user }: any) { if (session) { session.accessToken = token.accessToken; session.refreshToken = token.refreshToken; session.user.id = token.id; } return session; }, }, ``` 2. 만약 소셜로그인 시 생성된 토큰들을 spring boot 서버에 보내는 방법이 불가능하다면 따로 토큰을 생성해야 하는건가요? 그렇다면 next-auth를 사용하는 이점이 사라지는게 아닐까요??
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 10월 09일
NextAuth.js를 사용하면서 서버 측에서 별도의 JWT 인증을 구현하려고 하는 것으로 이해했습니다. 질문에 대한 답변을 드리겠습니다. 1. 각 소셜로그인 제공자가 자신들만의 토큰 형식을 가지며, 이는 일반적으로 JWT 형식과 다릅니다. 그래서 NextAuth에서 제공하는 `account.access_token` 및 `account.refresh_token`은 표준 JWT 형식이 아닐 수 있습니다. 따라서 해당 토큰을 임의로 변환하는 것은 안전하지 않고, 대신 서버 측에서 해당 토큰을 검증하거나 사용할 수 있는 API를 제공하는 소셜로그인 제공자(예: Google, Facebook 등)에게 문의해야 합니다. 2. NextAuth를 사용하는 주요 이점 중 하나는 OAuth 프로토콜에 기반한 소셜 로그인 과정을 쉽게 구현할 수 있다는 것입니다. JWT 생성 및 관리 뿐만 아니라, 세션 관리, CSRF 보호 등 보안 기능도 내장되어 있습니다. 만약 별도의 JWT 인증 시스템이 필요하다면, 소셜로그인 후 NextAuth가 반환한 session 객체로부터 얻은 유저 정보를 사용하여 서버 측에서 새로운 JWT를 생성하고 이를 유저에게 반환하는 방식을 고려해보시는 것이 좋습니다. 이 경우 NextAuth에서 제공하는 편의성과 보안 기능을 활용하면서, 별도로 서버 측 JWT 인증도 가능해집니다. 이 모든 것은 당신의 애플리케이션의 요구사항과 보안 필요성에 따라 다르므로, 가장 적합한 방법을 선택하는 것이 중요합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!