해결된 질문
작성
·
475
·
수정됨
1
안녕하세요
해당 강의를 통해서 OAuth2 로그인을 따라해보면서, 궁금한 점이 생겨서 질문 드립니다.
만약에 기존 유저에 OAuth2 로그인을 적용시키려면 어떻게 하는 지 궁금하네요..
요즘 여러 서비스에서, OAuth2를 도입하고 기존 계정에 Toggle 버튼 같이 네이버, 카카오 등을 On, Off 할 수 있는 기능들을 제공합니다
하지만 Spring Security OAuth2 Login 기능으로 기존 계정에 on,off 처럼 연결이 가능할까 의문도 들고 생각도 해봤지만 도저히 떠오르지 않더라구여
더군다나 기존 계정에 JWT 로 인증을 하고 있었다면 불가능하지 않나 생각이 들었습니다.
너무 막연하게 질문을 드렸는데, 정확하게 알고 싶은 것은 유저 상세 페이지에서 토글 버튼 같은 것으로 네이버 연동을 시도하여 네이버 로그인을 시도했을 때,
OAuth2UserService 에서 기존 유저에 대한 정보를 알 수 있는 방법이 있는 지 궁금합니다
답변 1
1
음
유저 상세 페이지로 접속한다는 것은 이미 로그인 한 상태라 볼 수 있는데 로그인 한 상태에서 네이버, 카카오 등으로 다시 로그인을 한다는 의미인가요?
소셜 로그인 요청 자체는 어떤 위치에서든 상관 없지만 현재 유저가 어떤 상태인지가 더 중요합니다.
단지 네이버 인증 상태에서 카카오 인증으로 다시 로그인을 하기 위한 것이라면 인증을 시도할 때 로그아웃 등의 처리를 하고 나서 카카오 인증을 다시 하도록 구현하시면 됩니다.
OAuth2UserService 는 스프링 시큐리티에서 기본적으로 제공하는 클라이언트 흐름 규칙만 지키면 자동적으로 호출되기 때문에 크게 문제가 될 것은 없습니다.
물론 이 과정에서 발생하는 여러 로직관련 이슈들을 잘 해결해 나가야 합니다.
JWT 로 인증한 상태에서 소셜 로그인을 시도한다면 소셜 인증이 완료되고 나서 다시 JWT 토큰을 발행하면 됩니다. 이럴 경우 토큰이 만료되었는지 여부나 토큰이 만료되지 않은 상황에서는 어떻게 처리할 지 등의 이슈도 고려해 봐야 합니다.
사실 어떤 프로세스로 처리하더라도 방법은 다 있게 마련입니다.
다만 시큐리티의 내부 구조를 깊이 그리고 정확하게 이해하지 못한 상태에서는 일부 기능을 커스트마이징 하는 것이 쉽지 않을 수 있습니다.
프로그래밍적으로 조금 더 부연 설명 해 주시면 답변 드리는데 도움이 될 것 같습니다.
넵 맞습니다
제가 생각해보았었던 구현 방법을 한번 말씀 드리겠습니다.
사용자 로그인 (JWT)
회원 상세 정보 화면 이동
상세 화면에서 위에서 첨부 드린 사진과 같이, sns 설정을 통해 네이버 연동 시작
네이버 선택시
oauth2/authorization/naver
redirect사용자 네이버 로그인 과정
네이버 로그인이 완료되면
OAuth2UserService
에서 네이버 계정의 정보를 얻어 오고, 기존 계정과 연동을 하고자 하는데 기존 계정의 정보를 알 수 있는 방법이 도저히 떠오르지 않아서 질문을 드렸었습니다.한 가지 생각한 것은, 4번의 과정에서 기존 계정을 Cookie 에 저장하고, 추후에 naver 로그인이 완료 되고
AuthenticationSuccessHandler
에서 request 안에 있는 cookie 로 판별하는 것이었습니다.하지만 이 방법은 (1)기존 계정에 SNS 연동을 하려고 하는 건지 (2)계정 로그인이 안된 상태에서 SNS 로그인 과정을 걸치는 건지 2가지 케이스가 있을 것 같은데, 이런 부분을 쿠키를 통해서 분기 처리를 한다는 것이 데이터 정합성에 문제가 생기지 않을까 염려되었습니다.