본 가이드는 json jwt 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.
📑 Table of Contents
ID Token과 Access Token은 OAuth 2.0 및 OpenID Connect(OIDC) 프로토콜에서 사용되는 두 가지 주요 토큰입니다. 구조적으로는 JWT(JSON Web Token) 형식을 사용하더라도 그 목적과 포함된 정보가 다릅니다.
ID Token (OIDC Only) For AuthN
{
"alg": "RS256",
"typ": "JWT"
}
{
"iss": "https://auth.example.com/",
"sub": "1234567890",
"aud": "your-client-id",
"exp": 1712352000,
"iat": 1609459200,
"name": "John Doe",
"email": "[email protected]"
}
- Header: 토큰이
RS256알고리즘으로 서명되었고, JWT 형식을 사용함을 나타냄. - Payload:
iss: 토큰 발급자(인증 서버).sub: 사용자 ID.aud: 토큰의 대상 (클라이언트 ID).exp: 토큰 만료 시간 (Unix 타임스탬프).iat: 토큰이 발급된 시간.name: 사용자 이름.email: 사용자 이메일.
Access Token (OAuth 2.0 And OIDC) For AuthZ
{
"alg": "HS256",
"typ": "JWT"
}
{
"iss": "https://auth.example.com/",
"sub": "1234567890",
"aud": "https://api.example.com/",
"exp": 1712352000,
"scope": "read write",
"client_id": "your-client-id"
}
- Header: 토큰이
HS256알고리즘으로 서명되었고, JWT 형식을 사용함을 나타냄. - Payload:
iss: 토큰 발급자(인증 서버).sub: 사용자 또는 클라이언트 ID.aud: 자원 서버(토큰이 적용될 API).exp: 토큰 만료 시간.scope: 토큰이 허용하는 권한 범위 (읽기/쓰기).client_id: 클라이언트 ID.
Features
OIDC 인증 순서 — curl로 표현됨 (TODO)
1. [Browser Redirect to OIDC Server] 클라이언트가 사용자 브라우저를 인증 서버로 리다이렉트
사용자를 인증하려면, 브라우저에서 로그인 페이지로 리다이렉트해야 합니다. 이때 클라이언트는 인증 서버에 authorization code를 요청합니다.
curl https://auth.example.com/authorize?
response_type=code&
client_id=your-client-id&
redirect_uri=https://yourapp.com/callback&
scope=openid%20profile%20email&
state=your-random-state-value
- response_type:
code(Authorization Code Flow를 의미) - client_id: 클라이언트 애플리케이션의 ID
- redirect_uri: 인증 후 사용자가 리다이렉션될 URI
- scope:
openid는 필수이고,profile,email등 추가 정보를 요청할 수 있음 - state: CSRF 공격을 방지하기 위한 랜덤 값
사용자가 로그인하면, 인증 서버는 클라이언트의 redirect_uri로 authorization code를 전달합니다.
1-1. [OIDC Server to Application Server] Authorization Code 콜백
curl https://yourapp.com/callback?code=AUTHORIZATION_CODE&state=your-random-state-value
2. [Application Server to OIDC Server] Authorization Code로 ID Token과 Access Token 발급 요청
authorization code를 사용해 클라이언트가 ID Token과 Access Token을 요청할 수 있습니다.
curl -X POST https://auth.example.com/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code" \
-d "code=AUTHORIZATION_CODE" \
-d "redirect_uri=https://yourapp.com/callback" \
-d "client_id=your-client-id" \
-d "client_secret=your-client-secret"
- grant_type:
authorization_code(클라이언트가 받은 코드로 토큰 요청) - code: 앞에서 받은
authorization code - redirect_uri: 코드 요청 시 사용했던 동일한 리다이렉트 URI
- client_id: 클라이언트 ID
- client_secret: 클라이언트의 비밀 키
2-1. Responce
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"id_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "8xLOxBtZp8"
}
- access_token: API 접근에 필요한 Access Token.
- id_token: 사용자 인증 정보가 포함된 ID Token.
- refresh_token: Access Token이 만료되었을 때 재발급 요청에 사용할 수 있는 토큰.
3. [Client to Application Server] Access Token을 사용해 보호된 자원 요청
Access Token을 사용해 보호된 API를 호출할 수 있습니다.
curl -X GET https://api.example.com/userinfo \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
이 요청은 Access Token을 통해 사용자 정보 또는 다른 자원에 접근할 수 있게 해줍니다.
*4. [Client to JWT Service] ID Token 검증 및 사용자 정보 확인
ID Token은 클라이언트에서 사용자의 신원을 확인하는 데 사용됩니다. 이 토큰을 디코딩하여 사용자의 정보를 얻을 수 있습니다. 이를 JWT 디코더를 이용해 디코딩하거나 클라이언트에서 직접 처리할 수 있습니다.
curl -X POST https://jwt.io/ \
-H "Content-Type: application/json" \
-d '{"token": "YOUR_ID_TOKEN"}'
이를 통해 사용자 정보를 확인할 수 있습니다.
요약
- 사용자가 로그인 페이지에서 인증하고, authorization code를 얻음.
- 이 코드를 사용해 ID Token과 Access Token을 발급받음.
- Access Token으로 보호된 자원에 접근.
- ID Token으로 사용자의 인증 정보를 확인.
이 순서는 OIDC의 표준 인증 흐름을 기반으로 하며, curl을 통해 API 요청을 어떻게 하는지 보여줍니다.
Leave a Reply