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"
}
인증 절차 흐름도
흐름도로 보게되면 아래와 같습니다.
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) 인증 절차
[참고] JWT (JSON Web Token)란 무엇인가?
'IT 지식' 카테고리의 다른 글
Authentication과 Authorization 차이 (0) | 2023.06.11 |
---|---|
JWT (JSON Web Token)의 구조와 사용 예 (0) | 2023.06.11 |
Open API와 OpenAPI의 개념과 차이 (0) | 2023.05.27 |
REST API의 개념과 동작 방식 (0) | 2023.05.27 |
Web Server 와 Web Application Server (WAS) 란? (1) | 2023.05.22 |