AppCredential

외부 앱 client_credential 폐기 (APP_CREDENTIAL_SCHEMA §6 + §1 line 50)

POST /v1/app-credentials/{client_id}/revoke 단일 진입점 (APP_CREDENTIAL_SCHEMA §6 line 195 + §1 line 50 1:1, PR-N-5).

Phase 2 외부 표면 4호 폐기 단계 (PR-N-3 발급 패턴 1:1 재사용 — 8 원칙 #1 공통모듈화). 정책 평가 + app_credentials UPDATE (ACTIVE -> REVOKED) + app_credential.revoked audit 적재 단일 트랜잭션. 단방향 전이 (resurrection 0건, 계획서 §16-1 line 816 정본).

응답 분기 (8 error_code → ERROR_CODES.md 표준 envelope 정밀 매핑 잠금): - 정상 폐기 → 200 OK + 3필드 envelope ({client_id, status='REVOKED', revoked_at}) - 정책 거부 (AuthPolicyError) → 401/402/403/422/429 (PR-M 정밀 매핑, 미들웨어 위임) - Service 거부 (AppCredentialRevokeError) → 8 error_code 정밀 매핑: * PRINCIPAL_KIND_FORBIDDEN → 403 AUTHZ_FORBIDDEN * PRINCIPAL_USER_ID_MISSING → 500 INTERNAL_ERROR (운영 진단) * ORGANIZATION_ID_MISSING → 400 VALIDATION_INVALID_FIELD * PRINCIPAL_NOT_OWNER_OR_ADMIN → 403 AUTHZ_FORBIDDEN * REVOKED_REASON_MISSING → 400 VALIDATION_INVALID_FIELD * REVOKED_REASON_FORBIDDEN → 400 VALIDATION_INVALID_FIELD * TARGET_NOT_FOUND → 404 RESOURCE_NOT_FOUND * TARGET_ALREADY_REVOKED → 409 RESOURCE_CONFLICT - Repository ValueError → 400 VALIDATION_INVALID_FIELD (client_id 정규식 위반 / organization_id 음수 등 사전 검증 결함 — Service 가 정상 통과한 입력이라 도달 0건 fallback) - 그 외 예외 → 500 INTERNAL_ERROR (미들웨어)

시나리오 4 (계획서 §15-5 line 791) 정합: 본 핸들러가 status='REVOKED' 전이 commit 후 동일 client_id 로 인증 시도 시 AuthPolicyService._verify_client_credential 의 status != 'ACTIVE' 분기 (CWE-208 Timing Oracle 차단 + OWASP 인증 모범 사례) 가 즉시 AUTH_CREDENTIAL_INVALID 401 거부 — 폐기 즉시 차단 보장.

Audit (계획서 §3-2.D line 219 + §14-2 line 684 정합): app_credential.revoked (AUDIT_LOG_SCHEMA §7 line 326) 단일 진입점 emit. payload={client_id, reason} 2키 + actor_user_id (who) + revoked_at (when) + revoked_reason (why) 1:1 정합. helper 의 audit durability 5분기로 DENIED/FAILURE/RevokeError/ValueError/SUCCESS 모두 commit 영구 보존 (감사로그 손실 0건).

post/v1/app-credentials/{client_id}/revoke

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/app-credentials/{client_id}/revoke
  • 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)

Path parameters

client_idstring required

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

Authorizationstring nullable
User-Agentstring 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 입니다.

Request body

revoked_reasonstring nullable

폐기 사유 (선택). console_user None → 'user_request' 자동 채움, admin_user None → REVOKED_REASON_MISSING 거부 (admin 명시 필수). principal_kind 별 허용 enum 위반 시 REVOKED_REASON_FORBIDDEN 거부.

Response

Successful Response

unknown required

Changes

No recorded changes to this operation across all 1 revision of this API.