Spring/Spring Security

[OAuth2] OAuth2 란? / OAuth2의 동작 방식

jungha_k 2022. 11. 28. 21:21

OAuth2

: 특정 애플리케이션(Client) 에서 사용자의 인증을 직접 처리하는 것이 아닌,

사용자 정보를 보유하고 있는 신뢰할만한 3rd party 애플리케이션 (Github, Google, Facebook 등) 에서 

사용자 인증을 대신 처리

 

Resource에 대한 자격 증명용 토큰을 발급

Client가 해당 토큰을 이용써드파티 애플리케이션의 서비스를 사용하게 해주는 방식

 

➡ 사용자의 크리덴셜이 클라이언트 서비스 애플리케이션에 직접적으로 제공되지 않아도 됨!

 

 

ex) 사용자의 Google Calendar 일정 기능을 이용하는 A 애플리케이션

 

로그인 자체는 구글 로그인 인증,

로그인 성공시 AccessToken 발급,

구글 Calendar API 이용 위해 AccessToken 이용

A 애플리케이션에 구글 크리덴셜 직접적 제공 X

크리덴셜 저장소 XXX 

➡ 직접 보관할 필요 없으므로 보안성 향상!

 

 

OAuth2 의 장점 

  • 간편한 회원 가입 (기존에 사용하던 써드파티 애플리케이션 이용해 로그인)
  • 서드 파티 애플리케이션에서 제공하는 API 접근 가능
  • OAuth2는 선택사항, 적용하는 경우 우리 애플리케이션에 서비스 인증 수단 필요
  • 자체 회원 가입 지원 하는 경우 별도의 로직, 테이블 변경 필요 

OAuth2 를 사용하는 애플리케이션 유형

 

1. 써드 파티 애플리케이션에서 제공하는 API 직접적인 사용

 

2. 추가적인 인증 서비스 제공 용도 

: Id, Password 이외에 로그인 인증 방법 제공

 

 

* 어떤 Resource를 소유하고 있는 Resource Owner를 대신하는 누군가(Client)가

Resource Owner의 대리인 역할을 수행!


OAuth2 인증 컴포넌트(=구성요소) 들의 역할

 

 

 

Resource Owner

: 사용하고자 하는 Resource의 소유자 (서비스 사용자)

 

 

Client

: 보호된 Resource에 액세스하는 애플리케이션 

'서비스를 이용하고자 하는 쪽'

 

 

Resource Server

: Client 요청 수락, Resource Owner에게 Resource 제공하는 서버

 

ex) A어플리케이션이 구글 로그인으로 보리(Resource Owner)의 사진을 가져올 경우,

Resource Server = Google Photo

 

 

Authorization Server

: Client 가 Resource Server에 접근할 수 있는 권한을 부여하는 서버 

 

인증 성공시 Resource Owner가 아닌 'Client 어플리케이션' 에게 Access Token 형태로 권한 부여 


Authorization Grant 

: Client 애플리케이션이 Access Token 을 얻기 위한 Resource Owner의 권한을 표현하는 크리덴셜

= Client 가 Access Token을 얻기 위한 수단

 

 

Authorization Grant 타입

  • Authorization Code Grant : 권한 부여 승인 코드 방식 (사용 多)

  • Implicit Grant Type : 암묵적 승인 방식
    : 별도의 Authorization Code 없이 바로 Access Token 발급 

  • Resource Owner Password Client Credentials Grant : 지원 소유자 자격 증명 승인 방식
    : 로그인 시 필요한 정보로 AccessToken 발급 

  • Client Credentials Grant : 클라이언트 자격 증명 승인 방식 
    : (Client 자신이 관리하는 Resource) or (Authorization Server)에 해당 Client를 위한 제한된 Resource 접근 권한이
    설정되어 있는 경우 사용 가능 

 

Access Token

: Client가 Resource Server에 있는 보호된 Resource에 액세스 하기 위해 사용하는 자격 증명용 토큰

 

 

Scope

: 주어진 액세스 토큰을 사용하여 액세스 할 수 있는 Resource 범위

 


OAuth + JWT? 

  • 사용자 로그인 인증은 OAuth2 로 처리
  • 인증된 사용자에 대한 자격 증명 부여 - JWT로 처리
  • CSR(Client Side Renderring) 방식 애플리케이션에 적합