OAUTH

OAUTH

애플리케이션의 유저 비밀번호를 Third party 앱에 제공없이 인증, 인가를 할 수 있는 오픈 스탠다르 프로토콜

OAuth 1.0과 OAuth 2.0 차이점

인증 절차 간소화

  • 기능의 단순화, 기능과 규모의 확장성 등을 지원 *기존의 OAuth 1.0은 디지털 서명 기반이지만, OAuth2.0의 암호화는 https에 맡김으로 디지털 서명에 관한 로직을 요구하지 않는다.(개발자입장에서 쉬워짐)

용어변경

  • Resource Owner : 사용자
  • Resource Server : REST API 서버
  • Authorization Server : 인증서버
  • Cliect : 써드파치 어플리케이션

Resource Server 와 Authorization Server 서버의 분리

  • 커다란 서비스는 인증 서버를 분리하거나 다중화 할 수 있어야함.
  • Authorization Server 의 역할을 명확히 함.

grant Type

OAuth 2.0 프레임워크의 핵심은 다양한 클라이언트 환경에 적합한 인증 및 권한의 위임 방법(grant_type)을 제공하고 그 결과로 클라이언트에게 access_token을 발급하는 것이다.

다양한 인증방식(Grant_type)

  • Authorization Code Grant
  • Implicit Grant
  • Resource Owner Password Credentials Grant
  • Client Credentials Grant
  • Custom Validators
  • JWT Profile for Client Authentication and Authorization Grants

Authorization Code Grant

+----------+
| Resource |
|   Owner  |
|          |
+----------+
     ^
     |
    (B)
+----|-----+          Client Identifier      +---------------+
|         -+----(A)-- & Redirection URI ---->|               |
|  User-   |                                 | Authorization |
|  Agent  -+----(B)-- User authenticates --->|     Server    |
|          |                                 |               |
|         -+----(C)-- Authorization Code ---<|               |
+-|----|---+                                 +---------------+
  |    |                                         ^      v
 (A)  (C)                                        |      |
  |    |                                         |      |
  ^    v                                         |      |
+---------+                                      |      |
|         |>---(D)-- Authorization Code ---------'      |
|  Client |          & Redirection URI                  |
|         |                                             |
|         |<---(E)----- Access Token -------------------'
+---------+       (w/ Optional Refresh Token)

Implicit Grant

+----------+
| Resource |
|  Owner   |
|          |
+----------+
     ^
     |
    (B)
+----|-----+          Client Identifier     +---------------+
|         -+----(A)-- & Redirection URI --->|               |
|  User-   |                                | Authorization |
|  Agent  -|----(B)-- User authenticates -->|     Server    |
|          |                                |               |
|          |<---(C)--- Redirection URI ----<|               |
|          |          with Access Token     +---------------+
|          |            in Fragment
|          |                                +---------------+
|          |----(D)--- Redirection URI ---->|   Web-Hosted  |
|          |          without Fragment      |     Client    |
|          |                                |    Resource   |
|     (F)  |<---(E)------- Script ---------<|               |
|          |                                +---------------+
+-|--------+
  |    |
 (A)  (G) Access Token
  |    |
  ^    v
+---------+
|         |
|  Client |
|         |
+---------+

Resource Owner Password Credentials Grant

+----------+
| Resource |
|  Owner   |
|          |
+----------+
     v
     |    Resource Owner
    (A) Password Credentials
     |
     v
+---------+                                  +---------------+
|         |>--(B)---- Resource Owner ------->|               |
|         |         Password Credentials     | Authorization |
| Client  |                                  |     Server    |
|         |<--(C)---- Access Token ---------<|               |
|         |    (w/ Optional Refresh Token)   |               |
+---------+                                  +---------------+

Client Credentials Grant

+---------+                                  +---------------+
:         :                                  :               :
:         :>-- A - Client Authentication --->: Authorization :
: Client  :                                  :     Server    :
:         :<-- B ---- Access Token ---------<:               :
:         :                                  :               :
+---------+                                  +---------------+

출처 : https://oauthlib.readthedocs.io/en/latest/oauth2/grants/grants.html 출처 : [http://www.websphere.pe.kr/xe/new_lecture/46477 ]http://www.websphere.pe.kr/xe/new_lecture/46477 )