본문 바로가기
Python/Django Oauth Toolkit

[DOT] Grant Type 에 따른 토큰 발급 방법

by 혀나Lee 2016. 9. 21.

이 페이지는 Django-OAuth-Toolkit에서 사용되는 Grant Type 에 따른 토큰 발급 방법에 대해 서술하고 있습니다.

Implicit Grant

Implicit Grant라고 하며, Javascript 등을 이용해 클라이언트 브라우저등에서만 모든 처리가 이루어지는 요청에 활용할 수 있습니다.

애플리케이션 등록

: {service_uri}/o/applications/ 페이지에 접속하여 애플리케이션을 등록한다. (Django urls.py 에 등록한 경로로 접속)

1. Parameters
  • client_type: public
  • grant_type: implicit
2. 애플리케이션 등록 결과


리다이렉트

등록된 애플리케이션 정보를 이용하여 리다이렉트 시킨다.


1. URI: {servie_uri}/o/authorize/
2. Parameters

 요청변수

설명

 client_id

 string(필수)

 애플리케이션 등록시 발급한 client ID

 redirect_uri 

 string(필수) 

 등록한 redirect_uri 

 response_type 

 string(필수): "token" 이라고 입력

 Implicit Grant 인증을 위함


3. 예제 URI

redirect_uri로 AccessToken을 발급 받음

Javascript 등을 이용해 클라이언트 브라우저 등에서만 모든 처리가 이루어지는 요청에 활용할 수 있습니다.
위의 주소로 접속하여 Authorize 버튼을 누르면 아래의 주소로 리다이렉트 된다.



Authorization Code Grant

Authorization Code Grant라고 부르며, JSP/Servlet, PHP등과 같은 Server-side 프로그래밍으로 인증을 구현할 경우 사용하기 적합한 인증 방식입니다.

애플리케이션 등록

: {service_uri}/o/applications/ 페이지에 접속하여 애플리케이션을 등록한다. (Django urls.py 에 등록한 경로로 접속)

1. Parameters
  • client_type: confidential
  • grant_type: Authorization code
2.  애플리케이션 등록 결과


리다이렉트

등록된 애플리케이션 정보를 이용하여 리다이렉트 시킨다.


1. URI: {servie_uri}/o/authorize/
2. Parameters

 요청변수

설명

 client_id

 string(필수)

 애플리케이션 등록시 발급한 client ID

 redirect_uri 

 string(필수) 

 등록한 redirect_uri 

 response_type 

 string(필수): "code" 이라고 입력

 Authorization code 인증을 위함


3. 예제 URI

https://test.com/o/authorize/?client_id=LXRbsg0rqX4IxknssK5DBzKkvaMyGXQbmG1QRcOl&redirect_uri=https://test.com&response_type=code 

redirect_uri로 AccessToken을 발급 받음

Javascript 등을 이용해 클라이언트 브라우저 등에서만 모든 처리가 이루어지는 요청에 활용할 수 있습니다.
위의 주소로 접속하여 Authorize 버튼을 누르면 아래의 주소로 리다이렉트 된다.

https://test.com/?code=U8zC1rxqaZ0wWg8YWAA9Io6hVJThI9#/


인증 허가 및 Access Token 발급 요청

content-type이 application/x-www-form-urlencoded인 HTTP POST 요청을 합니다.


1. URI: {servie_uri}/o/token/

2. Parameters


 요청변수

설명

 client_id

 string(필수)

 애플리케이션 등록시 발급한 client ID

 client_secret string(필수) 

 등록시 발급한 client secret

 redirect_uri 

 string(필수) 

 등록한 redirect_uri 

 code

 string(필수)

 1번 단계에서 발급 받은 authorization code

 grant_type

 string(필수) 

 "authorization_code" 입력 


3. Access Token 발급

{

  "token_type": "Bearer",

  "expires_in": 259200,

  "access_token": "Up1KNM0DzKehqTnAeunTa2Ps5lD627",

  "refresh_token": "MVm1aFbwfe6XmnDA4gu8So9uNhz3eU",

  "scope": "groups read write"

}


* 주의사항

: 1단계에서 발급 받은 code가 만료 됐을 경우 Access Token을 발급받을 때 "invalid_grant" error가 발생할 수 있습니다.

Resource owner password credentials

web과 native device 애플리케이션 에서 모두 신뢰할 수 있는 1st client일 경우에 사용된다.

애플리케이션 등록

: {service_uri}/o/applications/ 페이지에 접속하여 애플리케이션을 등록한다. (Django urls.py 에 등록한 경로로 접속)

1. Parameters
  • client_type: confidential
  • grant_type: Resource owner password-based
2. 애플리케이션 등록 결과


Access Token 발급 요청

content-type이 application/x-www-form-urlencoded인 HTTP POST 요청을 합니다.


1. URI: {servie_uri}/o/token/

2. Parameters


 요청변수

설명

 client_id

 string(필수)

 애플리케이션 등록시 발급한 client ID

 client_secret string(필수) 

 등록시 발급한 client secret

 grant_type

 string(필수) 

 "password" 입력 
 username string(필수)  애플리케이션 소유 계정 username 
 password 

 string(필수) 

 애플리케이션 소유 계정 password 


3. Access Token 발급

{

  "refresh_token": "v4poTbTkkdAhRxe3zRSaf3ZvUOhMD9",

  "expires_in": 259200,

  "access_token": "tK0YduHEURdqqaKY47ir8t8Pe3O2pM",

  "scope": "groups read write",

  "token_type": "Bearer"

}


Client credentials

client credentials grant 는 OAuth2.0 grants 중에서 가장 간단하며, 데이터에 접근하기 위한 사용자의 권한이 구체적이지 않아도 될 때 사용된다.

애플리케이션 등록

: {service_uri}/o/applications/ 페이지에 접속하여 애플리케이션을 등록한다. (Django urls.py 에 등록한 경로로 접속)

1. Parameters
  • client_type: public
  • grant_type: Client credentials
2. 애플리케이션 등록 결과

Access Token 발급 요청

content-type이 application/x-www-form-urlencoded인 HTTP POST 요청을 합니다.


1. URI: {servie_uri}/o/token/

2. Parameters


 요청변수

설명

 client_id

 string(필수)

 애플리케이션 등록시 발급한 client ID

 client_secret string(필수) 

 등록시 발급한 client secret

 grant_type

 string(필수) 

 "client_credentials" 입력 


3. Access Token 발급

{

  "token_type": "Bearer",

  "expires_in": 259200,

  "access_token": "gSyy9ixqTzj6076vNUuCZQ86Y8yZUb",

  "scope": "groups read write"

}


댓글