[OAuth 2.0] 6. Refreshing an Access Token

인가 서버가 클라이언트에게 리프레시 토큰을 발급한 경우, 클라이언트는 부록 B에 따라 "application/x-www-form-urlencoded" 형식을 사용하고, HTTP 요청 엔터티 본문(entity-body)에 UTF-8 문자 인코딩을 적용하여 다음 매개변수들을 추가함으로써 토큰 엔드포인트에 리프레시 요청을 보낸다:

 

  • grant_type
    • 필수(REQUIRED). 값은 반드시 "refresh_token"으로 설정되어야 한다.
  • refresh_token
    • 필수(REQUIRED). 클라이언트에게 발급된 리프레시 토큰.
  • scope
    • 선택(OPTIONAL). 3.3절에 설명된 액세스 요청의 범위. 요청된 범위는 리소스 소유자가 최초에 부여한 범위를 초과해서는 안 되며(MUST NOT), 이 값이 생략된 경우에는 리소스 소유자가 최초에 부여한 범위와 동일한 것으로 간주된다.

 

리프레시 토큰은 일반적으로 추가적인 액세스 토큰을 요청하기 위해 사용되는 장기간 유효한 자격 증명이므로, 리프레시 토큰은 그것이 발급된 클라이언트에 바인딩된다.

 

클라이언트 유형이 기밀 클라이언트이거나, 클라이언트 자격 증명이 발급되었거나(또는 다른 인증 요구 사항이 할당된 경우), 클라이언트는 3.2.1절에 설명된 바와 같이 인가 서버에 대해 반드시 인증을 수행해야 한다(MUST).

 

예를 들어, 클라이언트는 전송 계층 보안(transport-layer security)을 사용하여 다음과 같은 HTTP 요청을 보낸다

POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA

 

인가 서버는 반드시 다음을 수행해야 한다(MUST):

  • 기밀 클라이언트 또는 클라이언트 자격 증명이 발급된 모든 클라이언트(또는 다른 인증 요구 사항이 있는 클라이언트)에 대해 클라이언트 인증을 요구할 것,
  • 클라이언트 인증이 포함된 경우 클라이언트를 인증하고, 리프레시 토큰이 인증된 클라이언트에게 발급된 것임을 보장할 것,
  • 리프레시 토큰을 검증할 것.

 

검증이 유효하고 인가된 경우,

  • 인가 서버는 5.1절에 설명된 바와 같이 액세스 토큰을 발급한다.
  • 요청의 검증이 실패했거나 요청이 유효하지 않은 경우, 인가 서버는 5.2절에 설명된 오류 응답을 반환한다.

 

인가 서버는 새로운 리프레시 토큰을 발급할 수 있으며(MAY),

  • 이 경우 클라이언트는 기존의 리프레시 토큰을 반드시 폐기하고(MUST) 새로 발급된 리프레시 토큰으로 교체해야 한다.
  • 인가 서버는 클라이언트에게 새로운 리프레시 토큰을 발급한 이후 기존의 리프레시 토큰을 철회할 수 있다(MAY). 새로운 리프레시 토큰이 발급되는 경우, 해당 리프레시 토큰의 범위(scope)는 요청에 클라이언트가 포함한 리프레시 토큰의 범위와 반드시 동일해야 한다(MUST).