SpringBoot OAuth2.0 Reative Client With WebFlux Security
스프링부트 2.2.5 기반으로 작성 된 OAuth2.0 Reactive Client와 WebFlux Security 구현에 관련 된 글입니다.
OAuth2 Client 의 구현은 스프링부터의 경우 설정만으로 거의 모든 부분이 해결 됩니다. 여기에서는 구글, 카카오, 네이버 OAuth Client 로그인 및 해당 정보를 저장하는 부분까지 설명 하겠습니다.
구글은 OIDC(OpenID Connect) 을 카카오와 네이버는 OAuth2.0 을 지원합니다.
1. gradle에 필요한 라이브러리를 추가 합니다.
2. application properties 를 추가 합니다.
3. SecurityConfig에 oauth2Login 을 처리하도록 합니다.
4. User Entity를 만듭니다. (여기에는 MongoDB 입니다) OidcUser가 OAuth2User 를 상속받고 있습니다. 그리고 각 OAuth 제공자에게 받은 정보를 매칭할 각각의 OAuth2USerInfo를 만듭니다.
5. OAuth 제공자를 구분한 OAuth2UserInfoFactory 를 만듭니다.
여기까지 구현하면 인증처리는 완료 됩니다. 인증을 제공 받은 서비스에서 사용자의 정보 변경이 필요한 경우가 있습니다. 닉네임 또는 프로필 이미지를 OAuth 제공자로 부터 받은 정보에서 변경하고자 하는 경우 사용자 정보를 저장하고 저장한 정보를 변경하여야 합니다.
6. 사용자 정보를 저장하기 위해 CustomReactiveOAuth2UserService와 CustomReactiveOAuth2OidcUserService를 구현 합니다.
7–1. Web Test
SecurityConfig에 authenticationEntryPoint 따로 설정하지 않아 스프링이 기본 제공하는 UI를 이용하여 테스트 할 수 있습니다. 인증이 필요하다 지정한 /api 로 시작하는 요청을 하면 아래와 같은 화면이 나오고 인증을 진행 할 수 있습니다.

7–2. Postman Test
Postman으로 테스트 하는 경우 Postman에서 지원하는 Authorization을 통해 가능하며 Callback URL은 https://www.getpostman.com/oauth2/callback 로 지정해야 합니다. 인증 토큰을 받은 후 인증 받을 서버로 /oauth2/authorization/kakao|google|naver 로 인증을 요청한 후 테스트 진행하면 됩니다. (로컬 8080포트 서버에 카카오 인증인 경우 http://localhost:8080/oauth2/authorization/kakao 로 요청)



감사합니다.
참고자료