---
title: "JWKS public key retrieval (CRYPTO_KEY_SCHEMA §6)"
method: GET
path: "/v1/crypto/public-key"
tags: ["Crypto"]
---

# JWKS public key retrieval (CRYPTO_KEY_SCHEMA §6)

`GET /v1/crypto/public-key`

## Request

- Base URL: `https://api.xdata.kr` (the document declares no server; this is the origin it was published from)
- URL: `https://api.xdata.kr/v1/crypto/public-key`
- Auth: one of:
  - HTTP basic
  - OAuth 2 (authorization code, authorization URL `https://api.xdata.kr/oauth/authorize`, token URL `https://api.xdata.kr/oauth/token`)

`GET /v1/crypto/public-key` 공개키 조회 단일 진입점.

Phase 2 외부 표면 6호 — env_scope 별 ACTIVE + RETIRING JWKS 공개키 회수.
목록 조회와 같은 읽기 패턴을 그대로 쓴다(원칙 1 공통모듈화 · 3 일관성).
SELECT 만이므로 audit 신규 적재 0건 — 정책 평가 자체의
`auth.policy.evaluation` audit 1건만 §5-11 에서 적재.

env_scope 전달: ``resolve_env_scope`` dependency — Query ``env_scope`` 또는
``X-Env-Scope`` 헤더 (AUTH_POLICY_INTERFACE §5-5-i Query 관행 유지, PR-ENV-WIRE).

응답 분기 (CryptoKeyError 2종 + ValueError -> ERROR_CODES.md envelope):
    - 정상 조회                              -> 200 OK + JWKS envelope
      ({keys: [{kid, kty, alg, use, n, e}, ...]})
    - 정책 거부 (AuthPolicyError)            -> 401/402/403/422/429
      (PR-M 정밀 매핑, 미들웨어 위임)
    - Service 거부 (CryptoKeyError)          -> 2 error_code 정밀 매핑:
        * NO_ACTIVE_KEY_FOR_ENV_SCOPE       -> 503 SERVICE_UNAVAILABLE
        * INVALID_PEM_FORMAT                -> 500 INTERNAL_ERROR
    - Repository/Service ValueError          -> 400 VALIDATION_INVALID_FIELD
    - 그 외 예외                              -> 500 INTERNAL_ERROR (미들웨어)

금지 (CRYPTO_KEY_SCHEMA §10): server_public.pem file-based fallback /
crypto_keys 직접 SELECT / PEM 분해 — 본 핸들러는 auth_policy_routing
헬퍼 단일 경로만 사용.

## Query parameters

- `env_scope` 'production' | 'real_test' | 'sandbox', nullable: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.

## Headers

- `Authorization` string, nullable
- `X-Env-Scope` 'production' | 'real_test' | 'sandbox', nullable: 환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/xdata/apis/xboss-api.md) · [All operations](https://skmtc.dev/xdata/apis/xboss-api/llms.txt) · [OpenAPI document](https://skmtc.dev/xdata/apis/xboss-api/revisions/816de78950db?raw)
