IT 지식

RFC 7523 - JWT 인증 방식의 특징, OAuth 2.0과의 관계

JasonM 2023. 6. 2. 13:34
반응형

JWT Authorization Grant (RFC 7523)는 OAuth 2.0 인증 프레임워크 기반에서 작동하는 JWT인증 방식이며, 기본적으로 OAuth의 인증 절차를 그대로 사용하지만, 인증을 위해 JWT를 사용합니다. 

 

RFC 7523의 특징

또한 RFC 7523은 기본 OAuth 인증 방식과 다른 몇 가지 특징이 있습니다. Bearer JWT를 권한 부여 인증 방식으로 사용하기 위해 클라이언트는 Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants (RFC7521)에 정의된 것과 같이 다음 특정 매개변수 및 인코딩과 함께 액세스 토큰을 요청합니다.

  • "grant_type"의 값은 "urn:ietf:params:oauth:grant-type:jwt-bearer"
  • "assertion" 매개변수의 값은 단일 JWT를 포함 (JWT에 대한 설명은 포스트 아래 참조) 
  • OAuth Assertion Framework [RFC7521]에 정의된 대로 "scope" 매개변수를 사용하여 요청된 범위 표현
  • OAuth 2.0 (RFC6749)에 설명된 대로 클라이언트 인증은 선택 사항이므로 "client_id"는 매개변수에 의존하는 클라이언트 인증 형식이 사용될 때만 필요합니다.

 

RFC 7523 핵심 사항

그리고 RFC 7523에서 가장 중요한 특징은 바로 JWT의 전자서명은 필수라는 것입니다.

RFC 7523 기반의 환경에서 전자서명이 되지 않은 JWT는 Authorization Server에서 Reject 됩니다.

 

 

반응형

 

Request 예시

Access 토큰 발급 요청을 보낼 때 Request Body를 이런식으로 만들어서 보내게 되면, 

POST https://[URL]/oauth2/v1/token
Request Headers
	Content-Type: application/x-www-form-urlencoded
Request Body
    assertion: "xxxxx.yyyyy.zzzzz"
    scope: "com.test.api.member"
    grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer"

 

Response 예시

아래와 같은 Response Body를 전달 받게 됩니다. 여기서 전달받은 access_token을 실제 API 요청 시 항상 포함해서 전송합니다.

{
    "refresh_token_expires_in": "86399",
    "token_type": "Bearer",
    "access_token": "lQ2TAGCOISvpfx3hbAtMrV2dWGRA",
    "refresh_token": "oWsKEj7Gyi889GSGtNFVGuctTecrUgEz",
    "expires_in": "1799"
}

 

인증 절차 흐름도

흐름도로 보게되면 아래와 같습니다.

RFC 7523 인증 절차
RFC 7523 - JWT Authorization Grant Process Flow

 

OAuth 2.0과의 관계

 

OAuth 2.0 (RFC 6749)에서 JWT Grant Type에 대해서는 정의하지 않습니다.

하지만, OAuth는 인증 서버와 상호 작용할 때 클라이언트가 사용할 추가 인증 메커니즘의 정의를 허용합니다.

 

그런 추가 인증 매커니즘 중 하나가 바로 RFC 7523에서 정의하고 있는 JWT Authorization Grant입니다. 널리 사용되고 있지만 사실은 OAuth가 자체적으로 지원하는 것이라기보다는 확장된 개념의 Grant Type이라고 볼 수 있습니다.

 

[참고] OAuth 2.0 (RFC 6749) 인증 절차

 

OAuth 2.0 (RFC 6749) 인증 절차

OAuth의 최종 목적은 Access Token을 발급받는 것입니다. 그리고 발급받은 Access Token을 사용해서 특정 서버에 존재하는 리소스를 엑세스 할 수 있습니다. OAuth 2.0의 인증 절차 (A) 클라이언트가 리소스

jsonm.tistory.com

 

[참고] JWT (JSON Web Token)란 무엇인가?

 

JWT (JSON Web Token)란 무엇인가?

JWT(JSON Web Token)는 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 독립적인 방법을 정의하는 개방형 표준(RFC 7519)입니다. 이 정보는 디지털 서명되어 있으므로 확인하고 신뢰할

jsonm.tistory.com

 

 

반응형