외부 앱 client_credential 목록 조회 (APP_CREDENTIAL_SCHEMA §6 line 194)
GET /v1/app-credentials 단일 진입점 (APP_CREDENTIAL_SCHEMA §6 line 194 1:1, PR-N-6).
Phase 2 외부 표면 5호 — 자기 organization 의 ACTIVE 자격증명 목록 조회. PR-J-4 read 패턴 1:1 재사용 (8 원칙 #1 공통모듈화 + #3 일관성). SELECT 만 이므로 audit 신규 적재 0건 — 정책 평가 자체의 auth.policy.evaluation audit 1건만 §5-11 에서 적재.
응답 분기 (4 error_code → ERROR_CODES.md 표준 envelope 정밀 매핑 잠금): - 정상 조회 → 200 OK + 4필드 envelope ({items, total, limit, offset}) — items 는 6-key row (client_id / label / allowed_env_scopes / status / created_at / last_used_at) - 정책 거부 (AuthPolicyError) → 401/402/403/422/429 (PR-M 정밀 매핑, 미들웨어 위임) - Service 거부 (AppCredentialListError) → 4 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 - Repository ValueError → 400 VALIDATION_INVALID_FIELD (limit/offset 사전 검증 결함 — Pydantic Field constraints 가 1차 차단) - 그 외 예외 → 500 INTERNAL_ERROR (미들웨어)
Filter / Pagination (M-3 Opt-A + M-2 Opt-A 추천 결정): - status 필터: default ACTIVE-only (REVOKED 자격증명 외부 노출 0건 — 보안 표면 최소화). 후속 PR 에서 ?status=all|revoked query 파라미터로 확장 가능 (의식적 deferred — 본 PR-N-6 v1 default 잠금). - 정렬: created_at DESC, id DESC (최근 발급 순 + tie-breaker 안정 정렬). - SELECT 컬럼 (M-5 Opt-A — PII 외부 노출 0건): client_id / label / allowed_env_scopes / status / created_at / last_used_at 6 컬럼. 제외 = id / client_secret_hash / secret_algo / organization_id* / created_by_user_id* / revoked_* / last_used_ip_hash / updated_at.
organization 격리 (M-3 Opt-c 패턴 1:1 재사용): Repository SQL WHERE organization_id = :o + Service principal. organization_id 양측 잠금 — 다른 organization 의 자격증명 조회 표면 0건 (escalation 차단). console_user 는 자기 organization 만, admin_user 는 X-Organization-Id 헤더로 위임 organization 진입.
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
- 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)
Query parameters
페이지 크기 (1-100). default 20 — 운영자 콘솔 일반 페이지 크기 + Repository._validate_list_inputs 다층 안전망.
페이지 오프셋 (>= 0). default 0 — 첫 페이지 진입. OFFSET 음수는 Pydantic ge=0 + Repository._validate_list_inputs 양측 차단.
환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
Headers
환경을 고릅니다. 값은 production · real_test · sandbox 중 하나입니다. 경로 접두(/v1/sandbox/... · /v1/test/... · /v1/production/...) · X-Env-Scope 헤더 · env_scope 쿼리 가운데 한 통로로 반드시 보내야 합니다. 빼면 자동으로 채우지 않고 거절하며, 두 통로에 서로 다른 값을 담아도 거절합니다. 거절은 HTTP 422 이고 오류 코드는 VALIDATION_ENV_SCOPE_MISMATCH 입니다.
Response
Successful Response
Changes
No recorded changes to this operation across all 1 revision of this API.