[Spring Security] OAuth2 인증
OAuth2
- 사용자 정보를 보유하고 있는 신뢰할 만한 써드 파티 애플리케이션(GitHub, Google 등)에서 사용자의 인증을 대신 처리해 주고 접근 권한에 대한 토큰을 발급한 뒤 토큰을 이용해 써드 파티 애플리케이션의 서비스를 사용하게 해주는 방식
- OAuth 2 인증 Component(구성요소)
- Resource Owner
- Client
- Authorization Server
- Resource Server
- Authorization Grant
Client 애플리케이션이 Access Token을 얻기 위한 Resource Owner의 권한을 표현하는 크리덴셜(Credential)을 의미 (Client가 Access Token을 얻기 위한 수단)
Authorization Code Grant
(권한 부여 승인 코드 방식): 가장 많이 쓰이고 기본이 되는 방식
- 권한 부여 승인을 위해 자체 생성한 Authorization Code를 전달하는 방식
- 권한 부여 승인 요청시 응답 타입(response_type)을 code로 지정하여 요청
Implicit Grant
: 암묵적 승인 방식
Resource Owner Password Credential Grant
: 자원 소유자 자격 증명 승인 방식
Client Credentials Grant
: 클라이언트 자격 증명 승인 방식
OAuth2 실습 포인트
- 구글의 OAuth 2 인증 시스템을 사용하기 위해서는 구글 API 콘솔에서 OAuth 클라이언트를 생성해야 한다.
- ClientRegistration은 OAuth 2 시스템을 사용하는 Client 등록 정보를 표현하는 객체이다.
- Spring Security에서 제공하는
CommonOAuth2Provider
enum은 내부적으로 Builder 패턴을 이용해 ClientRegistration 인스턴스를 제공하는 역할을 한다.
- AuthenticationSuccessHandler 구현
- OAuth 2 인증 후, Frontend 애플리케이션 쪽으로 JWT를 전송하는 핵심 역할
- 여기에서 JWT를 생성하고, Frontend 쪽으로 JWT를 전송하기 위해 Redirect 하는 로직을 구현
SimpleUrlAuthenticationSuccessHandler
를 상속하면 Redirect를 손쉽게 할 수 있는 getRedirectStrategy().sendRedirect()
같은 API를 사용할 수 있다.
- OAuth 2 인증 시스템을 사용하면 회원 정보를 등록하거나 수정할 필요가 없기 때문에 관련 코드 수정
실습 후기
- JWT만 사용한 방식과의 차이를 중점으로, JWT와 OAuth2를 함께 사용한 방식의 애플리케이션 구현에 대해 다시 정리하며 학습할 것
- Frontend 애플리케이션의 실행 환경을 위해 아파치 웹서버 설치 후 실행하였을 때, Whitelabel Error Page 에러가 나서 해결하는데 어려움을 겪었는데, 맥은 이미 아파치가 설치되어있어서 homebrew를 통해 또 설치한 것이 문제였다. 새로 설치한 것을 제거하고 나니 실행되었다. 설정이 잘못되었다고 생각해서 설정을 이리저리 바꾸느라 오래 걸렸는데, 에러의 원인을 잘 파악하는 것이 중요함을 또한번 느꼈다.