OAuth2.0 란?
- 어떠한 서비스를 사용자에게 제공하기 위해 스스로 애플리케이션 서버 구축 및 로그인과 회원 가입 서비스를 구현하기 위해 사용자로부터 개인 정보를 받아 저장 하고 관리 해야한다.
- 즉, 인증(Authorization)을 서버에 구현해야한다.
- OAuth2.0 을 사용한다면, 이러한 인증을 서드 파티 애플리케이션(Google, facebook, kakao...) 등에 위임을 할 수 있다.
- 인증을 통해 획득한 토큰을 이용하여 정보소유자(Google, facebook, kakao...)에게 사용자 정보를 요청 할 수 있다.
OAuth2.0 요소
Client
- OAuth2.0을 사용해 서드 파티 로그인 기능을 구현 할 자사 또는 개인 애플리케이션 서버
Resource Owner
- 서드 파티 애플리케이션에 이미 개인 정보를 저장하고 있으며, Client가 제공하는 서비스를 이용하려는 사용자
Resource Server
- 사용자의 개인정보를 가지고 있는 애플리케이션(Google, facebook, kakao...)서버
- Client는 토큰을 이 서버에 넘겨 개인 정보를 얻을 수 있다.
Authorization Server
- 권한을 부여(인증)해주는 서버
- 사용자로 부터 이 서버로 ID, PW를 넘겨 Authorization Code를 발금
- 해당 code를 이 서버에 넘겨 토큰을 발급 받을 수 있다.

Spring Security 와 OAuth2.0
- 기본적으로 Spring Security는 Google, facebook, github, okta OAuth2.0 지원.
알아 두면 좋은 인터페이스
1. UserDetails
- Spring Security에서 사용자 정보를 담는 인터페이스
- Authentication Provider에서 해당 인터페이스를 이용하여 인증을 진행.
- username, password, authorities(권한정보,ex. ROLE_USER, ROLE_ADMIN)을 담고 있다.
2. UserDetailsService
- 사용자 정보를 가지고 오는 서비스를 제공하는 인터페이스
- loadByUserName() 메서드에 사용자 정보 가지고 오는 로직을 구현해야한다.
3. OAuth2User
- OAuth2 Provider로 제공된 Principal
- OAuth2Authentication에 사용이 된다.
- OAuth2 인증이 성공하게 되면, resource server로 부터 받아온 속성 정보(key,value 로 이루어져 있다.) 를 담고 있다.
Spring Security OAuth2.0 플로우 정리

참고
https://velog.io/@swchoi0329/스프링-시큐리티와-OAuth-2.0으로-로그인-기능-구현
https://loosie.tistory.com/302
https://www.baeldung.com/spring-security-5-oauth2-login
https://velog.io/@devsh/스프링-시큐리트-OAuth2-Filter-OAuth2AuthorizationRequestRedirectFilter-내부-로직
https://youtu.be/CWiwpvpCrro
https://hwannny.tistory.com/92
https://developers.payco.com/guide
ㅇ