개발자

next auth 소셜로그인으로 일반적인 jwt 인증방식 구현하기

2023년 10월 09일조회 1,067

안녕하세요 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를 사용하는 이점이 사라지는게 아닐까요??

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

이상선님의 프로필 사진

흔히 토큰은 id token과 oauth token이 있죠. id token은 jwt 형식으로 되어 있구요. https://medium.com/@sunyi233/id-token%EA%B3%BC-access-token-d285e647ee23 자세한 설명이 있어요.

리드오님의 프로필 사진

저도 동일한 궁금증이 있는데 개선하셨나요 ?

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 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 인증도 가능해집니다. 이 모든 것은 당신의 애플리케이션의 요구사항과 보안 필요성에 따라 다르므로, 가장 적합한 방법을 선택하는 것이 중요합니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!