OAuth / / 2024. 12. 18. 11:59

OpenID Connect (OIDC)

✅ 이 JSON 데이터는 OAuth 2.0OpenID 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 구성

  1. Header (헤더)

    • alg: 서명 알고리즘 (RS256)
    • kid: 키의 ID (JWT 서명 검증 시 사용)
      {
      "alg": "RS256",
      "kid": "78e91a93-d772-48ea-bfe2-41d329fadc15"
      }
  2. Payload (페이로드)

    • sub: 사용자 식별자 (Subject) → 사용자 ID 또는 고유한 식별자
    • aud: 토큰의 대상 (Audience) → 클라이언트 ID
    • nbf: 토큰의 사용 가능 시작 시간 (Not Before)
    • scope: 발급된 권한 범위 (여기서는 openid)
    • iss: 토큰 발급자 (Issuer) → 인증 서버의 URL
    • exp: 토큰 만료 시간 (Expiration Time)
    • iat: 토큰 발급 시간 (Issued At)
      {
      "sub": "bill",
      "aud": "client",
      "nbf": 1734490096,
      "scope": ["openid"],
      "iss": "http://localhost:8080",
      "exp": 1734490396,
      "priority": "HIGH",
      "iat": 1734490096
      }
  3. Signature (서명)

    • HeaderPayload를 서명하여 토큰의 무결성위변조 방지를 보장합니다.

3. id_token (ID 토큰)

ID TokenOpenID 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. 기타 필드

  1. scope: openid

    • 이 토큰이 발급될 때의 권한 범위입니다.
    • openid는 OpenID Connect에서 사용자 인증을 의미합니다.
  2. token_type: Bearer

    • 토큰의 유형을 나타내며, OAuth 2.0의 Bearer 토큰입니다.
    • HTTP 요청 시 Authorization 헤더에 포함됩니다.
      Authorization: Bearer <access_token>
  3. 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 헤더에 담김.
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유