본문 바로가기

카테고리 없음

OAuth2 개념 정리 - 삽질중인 개발자

반응형

- OAuth2 란 -

 

1. OAuth 란?

Open Authorization 로 다양한 플랫폼에서 권한 부여를 위한 산업 표준 프로토콜이다.

 

 

2. OAuth 탄생 배경

Oauth 방식이 등장하기 전에 내가 만든 사이트에서 다른 사이트의 리소스를 가져오기 위해서는 다른 사이트의 Id와 Password를 직접 입력을 받아 저장하여 필요할 때마다 불러와서 사용을 해야했다.

위와 같은 방식을 사용하게되면 다음과 같은 문제가 발생한다.

  • 사용자 : 내가 만든 사이트에 다른 사이트의 id와 password를 공개하는 것에 대해 신뢰할 수 없다.
  • 내가 만든 사이트 : id와 password를 받았기에 보안 문제가 생기는 경우 모든 책임을 져야한다.
  • 다른 사이트 ( google, naver ) : 내가 만든 사이트를 신뢰할 수 없다.

위와 같은 문제를 해결하기 위해 2006년에 트위터 개발자와 Gnolia의 개발자가 안전한 인증방식에 대한 논의를 하면서 OAuth가 등장했고 2010년에 OAuth1.0이 발표되었다. 현재는 OAuth 1.0a를 거쳐 OAuth2.0이 많이 사용되고 있다.

 

 

3. OAuth2.0 용어

Resource Server  OAuth2.0 서비스를 제공하고, 자원을 관리하는 서버
( 보통 google, naver 같은 다른 사이트 )
Resource Owner ( 자원 소유자 ) Resource Server의 계정을 소유하고 있는 사용자
( 사용자 )
Client  Resource Server의 API를 사용하여 데이터를 가져오려고 하는 사이트
( 내가 만든 사이트 )
Authorization Server ( 권한 서버 ) Client가 Resource Server의 서비스를 사용할 수 있게 인증하고 토큰을 발행해주는 서버
( 인증 서버 )

 

4. OAuth2.0 인증 흐름도

<출처> https://tools.ietf.org/html/rfc6749

A. Client(클라이언트) 측에서 Resource Owner (자원 소유자)에게 인증방식 4가지 중 하나로 승인을 요청한다.

B. Resource Owner(자원 소유자) 측에서 Client(클라기언트) 측으로 인증 권한을 부여한다.

C. Client(클라이언트)는 부여받은 인증 권한으로 Authorization Server(권한 서버)에 엑세스 토큰을 요청한다.

D. Authorization Server(권한 서버)에서 Client와 부여 받은 인증 권한에 대한 유효성을 검사 후 통과하면 엑세스 토큰을 부여한다.

E. Client(클라이언트)는 받아온 엑세스 토큰을 이용하여 Resource Owner(자원 소유자) 의 Resource(자원)에 접근을 요청한다.

F. Resource Server(자원 서버)는 해당 엑세스 토큰의 유효성을 검사한 후 통과하면 요청에 대한 Resource를 Client에 넘겨준다.

 

5. OAuth2.0 인증 방식

4번에서 설명한 흐름도에서 A ~ B 사이의 인증 방식에는 4가지가 있다. (tools.ietf.org/html/rfc6749 - 1.3.1 ~ 1.3.4)

  • Authorization Code - 코드를 이용한 인증 방식이며 다른거에 비해 보안성이 높기에 주로 사용되는 방식이다.
  • Implicit - Authorization Code 방식에서 코드를 통해 인증하는 부분을 뺀 방식
  • Resource Owner Password Credentials - Resource Owner에서 아이디 비번을 전달 받아 그걸로 Resource Server에 인증하는 방식 - 신뢰할 수 있는 Client여야지 가능한 방식
  • Client Credentials - Resource Owner가 사용자가 아닌 Client 자체일 때 사용되는 방식

 

 

 

반응형