Oauth 구현 방법 1
: 클라이언트는 외부 소셜에서 받은 인증코드를 받아 서버에 넘겨주고, 백엔드에서 발행한 토큰을 활용하는 방법
Oauth 구현 방법 2 (채택)
유저가 소셜 로그인 버튼을 누르면 frontend client에서 엔드포인트에 요청을 보냄
- 엔드포인트로 인증 요청을 받으면, Spring Sercurity의 OAuth2 클라이언트는 provider가 제공하는 AuthorizationURL(첫 로그인시 사용자 동의화면)로 redirect 한다.
- Oauth2에서의 콜백 결과가 에러이면 Spring Security는 OAuth2AuthenticationFailureHandler(Security Config에 정의)를 호출한다.
- OAuth2에서의 콜백 결과가 성공이고 사용자 인증코드(https://developers.google.com/identity/protocols/oauth2/openid-connect#scope-param에서 말하는 일회용 인증코드 code)도 포함하고 있다면 Spring Security는 access_token에 대한 authorization code를 교환하고
- customOAuth2UserService를 호출한다. (SecurityConfig에 정의함)
- customOAuth2UserService는 인증된 사용자의 세부사항을 검색한 후에 데이터베이스에 Create를 하거나 동일한 Email로 Update하는 로직을 작성
- 마지막으로 oAuth2AuthenticationSuccessHandler 이 불리고 그것이 JWT authentication token을 만들고 queryString에서의 redirect_uri로 간다 (client가 정의한) 이때 JWT token과 함께!