-
OAuth - Refresh Token Grantconcept/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와 클라이언트 암호를 보낼 수 있다.
'concept > server' 카테고리의 다른 글
OAuth - Resource Owner Credentials Grant (0) 2020.11.03 OAuth - Client Credentials Grant Type (0) 2020.11.03 OAuth - Implicit Grant Type (암시적 승인 타입) (0) 2020.11.02 OAuth - Authorization Code Grant Type (0) 2020.11.02 OAuth 2.0 Intro, 용어 (0) 2020.11.02