Google을 기준으로 OAuth2 인증 시스템을 적용해보고자 한다.
https://console.cloud.google.com/ 에서 클라이언트 ID와 Secret를 생성한다.
클라이언트 ID와 Secret는 애플리케이션 설정정보로 사용된다.
OAuth2을 적용하기 위해서는 OAuth2 의존성을 추가해주어야한다.
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
CSR 방식의 애플리케이션에 OAuth2를 적용되었을때의 흐름은 다음과 같다.
- Resource Owner가 웹 브라우저에서 Google로그인을 클릭한다.
- Frontend에서 Backend로 로그인 request를 전달한다.
- Google 로그인 화면을 요청하는 URI로 리다이렉트한다. (Backend -> Frontend)
- Resoruce Owner에게 로그인 화면을 오픈한다.
- Resource Owner가 로그인 인증정보를 입력해서 로그인을 수행한다.
- 로그인에 성공하면 Backend Redirect URI로 Authorization Codde를 요청한다(Backend -> Authorization Server)
- Authorization Server가 Backend 애플리케이션에게 Authorization Code를 전송한다.
- Backend 애플리케이션이 Authorization Server에게 Access Token을 요청한다
- Authorization Server가 Backend 애플리케이션에게 Access Token을 전송한다.
- Backend 애플리케이션이 Resource Server에게 User Info를 요청한다.(이 때 Access Token 필요)
- Resource Server가 해당 정보를 Backend 에게 전달한다.
- Backend 애플리케이션은 JWT로 구성된 Access Token과 Refresh Token을 생성해서 Frontend에게 준다.
12 과정에서 AuthenticationSuccessHandler를 사용해서 OAuth2 인증에 성공하면 JWT를 생성할 수 있도록 해준다.
이번 과정은 실습이 특히 중요한 과정이었다. 과제 내용대로 따라해도 여러번의 에러들이 발생했는데
오류 내용을 자세히 읽어보고 관련 내용을 구글링하며 해결하는 재미가 있었다.
+ 추가
메인 프로젝트를 진행하면서 OAuth2.0을 사용한 회원가입, 로그인 로직을 추가했다.
세부 내용은 다음과 같다.
2023.07.10 - [부트캠프 개발일기/Main-Project] - 102일차 - Main-Project Day 9 (Google OAuth2.0 회원가입, CSR 방식)
'부트캠프 개발일기 > Spring Security' 카테고리의 다른 글
67일차: OAuth2 인증 (0) | 2023.05.18 |
---|---|
66일차: Spring Security에 JWT 적용 (0) | 2023.05.17 |
65일차: 자격 증명 / JWT 인증 (0) | 2023.05.16 |
64일차: 인증(Authentication), 인가(Authorization) (0) | 2023.05.15 |
63일차: Spring Security (2) 웹요청 처리흐름, Filter Chain (0) | 2023.05.15 |