ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OAuth - Refresh Token Grant
    concept/server 2020. 11. 3. 13:26

    앞서 살펴본 것처럼 액세스 토큰은 일정 기간 동안만 유효하며 프레임이 종료되고 나면 만료된다.

    그 이유는 리프레시 토큰이 steal 당하면 해커가 만료(시간이 오래 걸리거나)까지 사용할 수 있거나 서버에서 블랙리스트에 올라 있기 때문에 보안을 확보하기 위해서이다.

     

    클라이언트가 액세스 토큰이 만료될 때마다 사용자에게 인증 및 권한을 요청하면 매우 힘들 것이다.

    이를 방지하기 위해 클라이언트 앱은 리프레시 토큰을 사용할 수 있다.

    리프레시 토큰은 만료될 때 액세스 토큰을 가져오는 데 사용할 수 있는 토큰이다.

    해커가 리프레시 토큰에 대한 액세스 권한을 얻으면 해커가 리소스에 무제한 액세스 권한을 갖기 때문에 이 정보는 기밀로 유지되어야 한다.

     

    권한 부여 서버에 의해 정의된 리프레시 토큰에 대한 설정은 서로 다르다. 일부 토큰은 일회용, 다른 토큰은 여러 번 사용할 수 있다.

    리프레시 토큰 또한 얼마 기간이 지나면 만료되긴 하지만, 이 시간은 액세스 토큰의 만료 시간보다 훨씬 길다.

     

    Refresh Token Grant Working

     

    1단계 : Refresh token request

     

    클라이언트가 이미 리프레시 토큰을 가지고 있는 경우, HTTP POST를 인증 서버에 요청하여 리프레시 토큰을 새 액세스 토큰으로 교환할 수 있다. 

     

    request 의 parameter은 다음과 같다.

    1. grant_type

    value 에는 리프레시 토큰이 들어간다.

    2. refresh_token

    3. client_id

    4. client_secret

     

    POST /oauth/v2/accessToken HTTP/1.1
    Host: authserver.dummy.com
    Content-Type: application/x-www-form-urlencoded
     
    grant_type=refresh_token
    &refresh_token=k3hjJE5x1lZh-zjU-02w8EJW6l2jnuP8F1uXMgkm8nzjPfnaJR
    &client_id=12345
    &client_secret=hhdHFgggdFGfhd

     

     

    2단계 : Refresh token response

     

    클라이언트의 자격 증명이 유효하고, 리프레시 토큰이 만료되지 않은 경우에 액세스 토큰이 반환된다.

    Authorization server의 response는 다음과 같다.

     

    POST /token/endpoint HTTP/1.1
     
      Host: authserver.dummy.com
     
      "access_token": "dgfYTGFVygPtyqytVfyGFtyF",
      "expires_in": 3600,
      "refresh_token": "GHcdkHJjcbhhBHJGbhjfgkHghB",
      "refresh_token_expires_in": 500000

     

     

     

    Which flows allow refresh token grants?

     

    앞에서 포스팅한 네 가지 흐름 중 두 가지 흐름은 리프레시 토큰 부여를 허용하지 않는다.

    Implicit grant type

    이 유형에서는 클라이언트가 client_secret을 저장할 수 없다. 따라서 극비 사항인 리프레시 토큰을 보관할 수 없다.

     

    client credentials grant type

    이 type은 유저가 없으므로 리프레시 토큰의 필요성이 발생하지 않는다. 클라이언트는 액세스 토큰을 얻기 위해 클라이언트 ID와 클라이언트 암호를 보낼 수 있다.

    댓글

Designed by Tistory.