✅ 이 JSON 데이터는 OAuth 2.0 및 OpenID Connect (OIDC) 표준을 기반으로 토큰 정보를 담고 있습니다. 여기에는 Access Token, ID Token, 그리고 기타 메타데이터가 포함되어 있습니다. 각 항목과 함께 개념을 하나씩 자세히 살펴보겠습니다.
1. 전체 구조 개요
이 JSON은 OpenID Connect 프로토콜을 사용하여 인증 및 인가를 수행한 결과입니다.
키 | 설명 |
---|---|
access_token |
API에 접근할 때 사용하는 Access Token |
scope |
발급된 토큰의 권한 범위 |
id_token |
사용자 인증 정보가 담긴 ID Token |
token_type |
토큰의 유형 (Bearer: OAuth 2.0에서 주로 사용) |
expires_in |
토큰의 유효 시간 (초 단위) |
2. access_token
(액세스 토큰)
역할
- 리소스 서버에 접근하기 위한 권한 증명입니다.
- 이 토큰을 요청의
Authorization
헤더에 포함시켜 API 요청을 할 수 있습니다.
형식
- 이 Access Token은 JWT 형식으로 되어 있습니다.
- 토큰의 내용은 Base64로 인코딩된 헤더(Header), 페이로드(Payload), 서명(Signature)으로 구성됩니다.
Access Token 예시:
eyJraWQiOiI3OGU5MWE5My1kNzcyLTQ4ZWEtYmZlMi00MWQzMjlmYWRjMTUiLCJhbGciOiJSUzI1NiJ9
.
eyJzdWIiOiJiaWxsIiwiYXVkIjoiY2xpZW50IiwibmJmIjoxNzM0NDkwMDk2LCJzY29wZSI6WyJvcGVuaWQiXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwIiwiZXhwIjoxNzM0NDkwMzk2LCJwcmlvcml0eSI6IkhJR0giLCJpYXQiOjE3MzQ0OTAwOTZ9
.
<서명>
Access Token 구성
Header (헤더)
alg
: 서명 알고리즘 (RS256)kid
: 키의 ID (JWT 서명 검증 시 사용){ "alg": "RS256", "kid": "78e91a93-d772-48ea-bfe2-41d329fadc15" }
Payload (페이로드)
sub
: 사용자 식별자 (Subject) → 사용자 ID 또는 고유한 식별자aud
: 토큰의 대상 (Audience) → 클라이언트 IDnbf
: 토큰의 사용 가능 시작 시간 (Not Before)scope
: 발급된 권한 범위 (여기서는openid
)iss
: 토큰 발급자 (Issuer) → 인증 서버의 URLexp
: 토큰 만료 시간 (Expiration Time)iat
: 토큰 발급 시간 (Issued At){ "sub": "bill", "aud": "client", "nbf": 1734490096, "scope": ["openid"], "iss": "http://localhost:8080", "exp": 1734490396, "priority": "HIGH", "iat": 1734490096 }
Signature (서명)
- Header와 Payload를 서명하여 토큰의 무결성과 위변조 방지를 보장합니다.
3. id_token
(ID 토큰)
ID Token은 OpenID Connect에서 사용자의 인증 정보를 전달하기 위해 발급됩니다.
역할
- 클라이언트가 사용자의 인증 상태를 확인하는 데 사용됩니다.
- 사용자 정보(Claims)가 포함되어 있으며, 클라이언트에서 직접 검증 가능합니다.
ID Token 내용 예시:
{
"sub": "bill", // 사용자 ID
"aud": "client", // 클라이언트 ID
"azp": "client", // 권한 부여된 클라이언트 ID
"auth_time": 1734490058, // 인증 수행 시간
"iss": "http://localhost:8080", // 발급자 URL
"exp": 1734491896, // 만료 시간
"priority": "HIGH", // 커스텀 클레임
"iat": 1734490096, // 발급 시간
"sid": "_ozijy3yH0YYZVrCQPke8pCq"
}
4. 기타 필드
scope
:openid
- 이 토큰이 발급될 때의 권한 범위입니다.
openid
는 OpenID Connect에서 사용자 인증을 의미합니다.
token_type
:Bearer
- 토큰의 유형을 나타내며, OAuth 2.0의 Bearer 토큰입니다.
- HTTP 요청 시
Authorization
헤더에 포함됩니다.Authorization: Bearer <access_token>
expires_in
: 299- 토큰의 남은 유효 시간(초 단위)입니다.
- 이 예시에서는 299초(약 5분) 동안 유효합니다.
5. 요약
이 JSON 데이터는 OpenID Connect에서 인증 및 권한 부여를 거친 결과입니다.
- Access Token: 리소스 서버에 접근할 때 사용되는 토큰.
- ID Token: 사용자 정보를 담고 있는 토큰.
- Scope: 토큰에 부여된 권한 범위 (
openid
). - Expires In: 토큰의 유효 시간 (초 단위).
✅ 정리하면:
- Access Token: API 호출 시 권한 증명.
- ID Token: 사용자 인증 정보 제공.
- Bearer: 토큰 타입이며, HTTP 요청 시
Authorization
헤더에 담김.
'OAuth' 카테고리의 다른 글
/.well-known/openid-configuration (0) | 2024.12.18 |
---|---|
인가 코드 그랜트 타입과 클라이언트 크레덴셜 그랜트 타입 (0) | 2024.12.18 |
Client Credentials Grant Type (0) | 2024.12.18 |
OAuth 2.0 액세스 토큰 발급 방법 (0) | 2024.12.17 |
Spring Authorization Server 구성 (0) | 2024.12.17 |