
# 서명 키 목록

`GET /v1/signing-keys` · 권한 `signing-keys:read`

환경의 JWKS에 현재 게시된 토큰 서명 키를 반환합니다. `next`(게시됨, 아직 서명하지 않음), `active`(새 토큰에 서명), `retired`(서명을 중단함, 이 키로 서명된 토큰을 계속 검증할 수 있도록 7일간 게시 유지)입니다. 순서는 `next`, `active`, 그다음 `retired`(최신순)입니다. JWKS에서 제거된 키와 긴급 교체로 폐기된 키는 반환되지 않습니다. 응답에는 공개 정보만 있습니다. `kid`는 RFC 7638 JWK SHA-256 지문(base64url)이며, 개인 키 자료는 서명 서비스를 벗어나지 않으므로 어떤 응답에도 포함되지 않습니다.

## 요청

이 작업은 경로, 쿼리 또는 본문 필드를 받지 않습니다. 환경은 자격 증명에서 가져옵니다.

## 응답

`200 OK`와 `data`(키), `list_metadata`. 목록은 JWKS만큼 작고 페이지로 나뉘지 않으므로 두 커서는 항상 `null`입니다. `next` 키의 `activated_at`은 `null`이며, `retired_at`과 `removal_at`(키가 JWKS에서 제거되는 시점)은 `retired` 키에만 설정됩니다.

```json
{
  "data": [
    {
      "kid": "ypeBEsobvcr6wjGzmiPcTaeG7_gUfE5yuYB3ha_uSLs",
      "use": "token_signing",
      "algorithm": "RS256",
      "state": "next",
      "storage": "wrapped",
      "created_at": "2026-09-05T09:30:00.123456Z",
      "activated_at": null,
      "retired_at": null,
      "removal_at": null
    },
    {
      "kid": "PiPoFgA5WUoziU9lZOGxNIu9egCI1CxKy3PurtWcAJ0",
      "use": "token_signing",
      "algorithm": "RS256",
      "state": "active",
      "storage": "wrapped",
      "created_at": "2026-03-09T09:30:00.123456Z",
      "activated_at": "2026-09-05T09:30:00.123456Z",
      "retired_at": null,
      "removal_at": null
    },
    {
      "kid": "Ln0sA6lQeuJl7PW1NWiFpTOTogKdJBOUmXJloaJa78Y",
      "use": "token_signing",
      "algorithm": "RS256",
      "state": "retired",
      "storage": "wrapped",
      "created_at": "2025-09-10T09:30:00.123456Z",
      "activated_at": "2026-03-09T09:30:00.123456Z",
      "retired_at": "2026-09-05T09:30:00.123456Z",
      "removal_at": "2026-09-12T09:30:00.123456Z"
    }
  ],
  "list_metadata": {
    "before": null,
    "after": null
  }
}
```

## 오류

| HTTP | code | 조건 |
|---|---|---|
| 401 | `unauthenticated` | 자격 증명이 누락되었거나, 잘못되었거나, 취소되었습니다. |
| 403 | `insufficient_permissions` | 자격 증명에 필요한 권한이 없습니다. |
| 429 | `rate_limited` | 속도 제한을 초과했습니다. `Retry-After` 기간 후에 다시 시도하세요. |
| 501 | `not_implemented` | 이 배포에서는 아직 작업을 사용할 수 없습니다. 다시 시도해도 결과는 바뀌지 않습니다. |
| 503 | `service_unavailable` | 종속성을 일시적으로 사용할 수 없습니다. `Retry-After` 기간 후에 다시 시도하세요. |

## 예제

```bash
curl https://api.eu.keenauth.com/v1/signing-keys \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```
