반응형
oAuth 2.0
개념
- 인증 및 권한 부여를 위한 인증 프로토콜
- 제 3자 애플리케이션이 사용자의 자원(ex: 이메일, 프로필 정보 등)에 안전하게 접근할 수 있도록 권한을 위임하는 방식으로 동작
- 사용자는 자신의 자격 증명(아이디, 비밀번호)를 외부 애플리케이션에 제공하지 않고, 신뢰할 수 있는 권한 서버를 통해 인증 절차를 수행
구성 요소
- Resource Owner(자원 소유자): 권한을 사용할 수 있는 사용자
- Client(클라이언트 애플리케이션): 사용자의 권한을 위임받아 자원에 접근하려는 애플리케이션
- Authorization Server(권한 서버): 사용자의 인증을 처리하고, 클라이언트에게 엑세스 토큰을 발급하는 서버
- Resource Server(자원 서버): 엑세스 토큰을 검증하고 요청에 따라 자원을 제공하는 서버
구글(Google) oAuth 2.0 적용
1. Security 및 oAuth 라이브러리 적용
2. SecurityConfig 설정
- SecurityFilterChain에 .oauth2Login 추가
- userInfoEndpoint
- 인증된 사용자 정보를 가져오기 위한 엔드포인트
- userService(customOAuth2UserService)를 통해 인증 후 사용자 정보를 어떻게 가져오고 처리할지 정의
- customOAuth2UserService
- 사용자가 인증을 완료하면 이 서비스가 호출되어 사용자 정보를 커스터마이징
- SuccessHandler
- OAuth 2.0 인증이 성공적으로 완료된 후 실행되는 핸들러
- 인증이 완료된 사용자를 위한 추가 작업(ex: JWT 토큰 생성 등)을 처리
- OAuth2AccessTokenResponseClient
- OAuth 2.0 인증 흐름 중 하나인 Authorization Code Grant 방식에서 클라이언트가 권한 코드를 사용해 엑세스 토큰을 요청할 때 사용하는 인터페이스
- DefaultAuthorizationCodeTokenResponseClient
- Spring Security에서 기본적으로 제공하는 구현체로 권한 코드를 엑세스 토큰으로 교환하기 위해 OAuth 2.0 서버와 통신하는 역할
- OAuth 2.0 인증 흐름에서 클라이언트와 권한 서버 간의 엑세스 토큰 교환을 처리하는데 사용
3. CustomOAuth2User 클래스
- OAuth 2.0 인증 후 사용자 정보를 관리하는 커스텀 사용자 객체
- OAuthUser
- OAuth 2.0 인증이 완료된 후 사용자의 정보가 담긴 객체
- 기본적으로 사용자의 속성(Attribute) 정보를 제공하는 역할
- getAttributes()
- 사용자의 속성 정보를 반환(이름, 이메일 등)
- getAuthorities()
- 사용자의 권한을 반환
- Spring Security에서 인가(authorization) 처리를 할 때 사용
4. CustomOAuth2UserService 클래스
- OAuth 2.0 인증 후 사용자의 정보를 로드하고 사용자 계정 및 멤버 객체를 생성하거나 기존 계정을 가져오는 로직
- OAuth2UserService<OAuth2UserRequest, OAuth2User> delegate = new DefaultOAuth2UserService();
- DefaultOAuth2UserService를 사용해 기본적으로 제공되는 방식으로 사용자 정보를 로드
- OAuth 2.0 공급자로부터 사용자 정보를 가져오는 역할
- OAuth2User oAuth2User = delegate.loadUser(userRequest);
- loadUser 메소드를 호출하여 공급자에게 사용자의 속성 정보를 로드
- oAuth2User는 사용자의 속성 정보가 포함된 객체
- 사용자 계정 및 멤버 정보 조회 후 데이터베이스 등록 로직 진행
- return new CustomOAuth2User(oAuth2User, accountResponse.roles().name());
- 최종적으로 CustomOAuth2User 객체를 반환
- oAuth2User와 role이 반환
5. CustomUserDetailService 클래스
- Spring Security가 인증 과정을 수행할 때 호출되는 메소드로 사용자 정보를 UserDeatils 객체로 반환
- LoginId를 기반으로 사용자를 조회하고 사용자 정보를 반환
- 추후에 JWT 인증 과정에서 사용자 여부를 확인하기 위해 사용
6. OAuth2SuccessHandler 클래스
- OAuth 2.0 인증이 성공 후 실행되는 Handler
- 인증이 성공하면 JWT 토큰을 발급(AccessToken, RefreshToken)
- 발급된 토큰은 쿠키에 설정하여 클라이언트로 전달
**전체적인 흐름 간단 요약**
- 사용자가 Google 로그인에서 "확인"을 누르면 Authorization Code획득
- OAuth2AccessTokenResponseClient가 Authorization Code로 Access Token을 요청
- Spring Security가 Access Token을 OAuth2UserRequest에 저장
- loadUser 메서드가 OAuth2UserRequest에서 Access Token을 가져와 사용자 정보를 요청
반응형
'IT' 카테고리의 다른 글
[OAuth ,Security] CustomUserDetailsService과 CustomOAuth2UserService 차이점 (1) | 2024.12.02 |
---|---|
[JWT] 프로젝트 JWT 토큰 적용(Access, Refresh, OAuth 2.0) (1) | 2024.11.20 |
[백엔드 면접] GPT4o 기반 CS 기술 면접 (2) (0) | 2024.07.17 |
[백엔드 면접] GPT4o 기반 CS 기술 면접 (0) | 2024.07.04 |
[Python] 파이썬 문법 정리[4탄] (코딩 테스트 대비) (0) | 2024.06.26 |