✅ 학습 목표
- OAuth 2가 무엇인지 이해할 수 있다.
- OAuth 2의 인증 방식에 대해 설명할 수 있다.
- Authorization 서버와 Resource 서버의 차이에 대해 이해할 수 있다
OAuth 2란?
- 사용자 정보를 보유하고 있는 신뢰할 만한 써드 파티 애플리케이션(GitHub, Google, Facebook 등)에서 사용자의 인증을 대신 처리해 주고 접근 권한에 대한 토큰을 발급한 뒤 해당 토큰을 이용해 써드 파티 애플리케이션의 서비스를 사용하게 해주는 방식
- OAuth 2를 사용하는 애플리케이션 유형
- 써드 파티 애플리케이션에서 제공하는 API를 직접적으로 사용
- 추가적인 인증 서비스를 제공하기 위한 용도
OAuth 2의 인증 방식
+--------+ +---------------+
| |--(A)- Authorization Request ->| Resource |
| | | Owner |
| |<-(B)-- Authorization Grant ---| |
| | +---------------+
| |
| | +---------------+
| |--(C)-- Authorization Grant -->| Authorization |
| Client | | Server |
| |<-(D)----- Access Token -------| |
| | +---------------+
| |
| | +---------------+
| |--(E)----- Access Token ------>| Resource |
| | | Server |
| |<-(F)--- Protected Resource ---| |
+--------+ +---------------+
Figure 1: Abstract Protocol Flow
+--------+ +---------------+
| |--(A)------- Authorization Grant --------->| |
| | | |
| |<-(B)----------- Access Token -------------| |
| | & Refresh Token | |
| | | |
| | +----------+ | |
| |--(C)---- Access Token ---->| | | |
| | | | | |
| |<-(D)- Protected Resource --| Resource | | Authorization |
| Client | | Server | | Server |
| |--(E)---- Access Token ---->| | | |
| | | | | |
| |<-(F)- Invalid Token Error -| | | |
| | +----------+ | |
| | | |
| |--(G)----------- Refresh Token ----------->| |
| | | |
| |<-(H)----------- Access Token -------------| |
+--------+ & Optional Refresh Token +---------------+
Figure 2: Refreshing an Expired Access Token
Resource Owner
사용하고자 하는 Resource의 소유자
Client
Resource Owner를 대신해 보호된 Resource에 액세스하는 애플리케이션
Resource Server
Client의 요청을 수락하고 Resource Owner에게 해당하는 Resource를 제공하는 서버
Authorization Server
Client가 Resource Server에 접근할 수 있는 권한을 부여하는 서버
Authorization Grant에 따른 인증 처리 방식
- Authorization Code Grant : 권한 부여 승인 코드 방식
- Implicit Grant : 암묵적 승인 방식
- Resource Owner Password Credential Grant : 자원 소유자 자격 증명 승인 방식
- Client Credentials Grant : 클라이언트 자격 증명 승인 방식
📚 참고
'부트캠프 기록 > Section4' 카테고리의 다른 글
[Spring WebFlux] 리액티브 프로그래밍 (0) | 2022.11.29 |
---|---|
[Spring Security] JWT 자격 증명을 위한 로그인 인증 구현 (0) | 2022.11.26 |
[Spring Security] JWT 개요 (0) | 2022.11.23 |
[Spring Security] 권한 부여(Authorization, 인가) 처리 흐름 (0) | 2022.11.22 |
[Spring Security] Spring Security 인증 구성요소 이해 (0) | 2022.11.21 |