subject 충돌 해결
POST /v1/connections/{connection_id}/subject-conflicts/{conflict_id}:resolve · 권한 users:write
열려 있는 SSO subject 충돌(연결의 subject 충돌 목록 조회 참조)에 대해 관리자의 결정을 적용합니다. 새 subject가 누구의 것인지 ID 공급자의 관리자와 확인한 후에만 결정하십시오.
resolution |
의미 | KeenAuth의 동작 |
|---|---|---|
same_person |
새 subject가 같은 사람의 것입니다(예: ID 공급자에서 계정을 다시 만든 경우). | 이 연결에서 사용자의 기존 ID를 새 subject로 교체합니다. 다음 로그인부터 사용자는 새 subject로 로그인합니다. |
different_person |
이메일 주소가 다른 사람에게 할당되었습니다. | 레코드를 닫고 아무것도 연결하지 않습니다. 새 사람이 기존 계정에 들어갈 수 없습니다. |
different_person을 선택한 후 새 사람이 다음 번에 로그인하면 새 레코드가 생성됩니다. 새 사람이 로그인하도록 하려면 기존 계정의 이메일 주소를 변경하거나, 해당 계정을 차단 또는 삭제하십시오. 그 후에는 일반 로그인 규칙이 적용됩니다.
ID 변경, 해당 이벤트 및 감사 기록은 하나의 트랜잭션으로 기록됩니다. 감사 행위자는 호출을 수행한 자격 증명입니다.
같은 결정을 반복하면 아무것도 기록하지 않고 레코드를 반환합니다. 이미 해결된 레코드에 다른 결정을 내리면 409 conflict를 반환합니다. 재시도 시 원래 응답을 돌려받으려면 Idempotency-Key를 보내십시오.
요청
| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
connection_id |
path | 예 | 연결 ID (conn_…). |
conflict_id |
path | 예 | subject 충돌 ID (sscf_…). |
resolution |
body | 예 | same_person 또는 different_person. |
{ "resolution": "same_person" }
응답
해결된 레코드와 함께 200 OK를 반환합니다:
{
"id": "sscf_01j9xr4a6b8c0d2e4f6g8h0j2k",
"connection_id": "conn_01j9xp6q0r1s5t7v9w1x3y5z7b",
"user_id": "usr_01j9xm2n4p6q8r0s2t4v6w8x0y",
"status": "resolved",
"resolution": "same_person",
"created_at": "2026-10-28T10:00:00Z",
"last_seen_at": "2026-10-28T10:05:00Z",
"expires_at": "2026-11-27T10:00:00Z",
"closed_at": "2026-10-28T11:00:00Z"
}
오류
| HTTP | code | 발생 조건 |
|---|---|---|
| 400 | unknown_field / malformed_request |
본문에 알 수 없는 필드가 있거나 올바른 JSON이 아닙니다. |
| 401 | unauthenticated |
자격 증명이 없거나, 유효하지 않거나, 취소되었습니다. |
| 403 | insufficient_permissions |
자격 증명에 users:write 권한이 없습니다. |
| 403 | user_not_active |
same_person: 사용자가 차단되었거나 삭제 중입니다. 레코드는 열린 상태로 유지됩니다. |
| 404 | not_found |
이 환경에 연결 또는 레코드가 없거나, 레코드가 다른 연결에 속하거나, 만료되었습니다. |
| 409 | conflict |
레코드가 다른 결정으로 이미 해결되었습니다. 또는 same_person의 경우 연결이 활성 상태가 아니거나, 새 subject가 이제 다른 사용자에 연결되어 있거나, 사용자의 ID 한도에 도달했습니다. same_person인 경우 레코드는 열린 상태로 유지됩니다. |
| 422 | validation_failed |
resolution이 없거나 두 값 중 하나가 아닙니다(errors[].pointer = /resolution). |
| 429 | rate_limited |
요청 한도를 초과했습니다. Retry-After 기간이 지난 후 다시 시도하십시오. |
| 503 | service_unavailable |
종속 서비스를 일시적으로 사용할 수 없습니다. Retry-After 기간이 지난 후 다시 시도하십시오. |
예제
curl -X POST "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b/subject-conflicts/sscf_01j9xr4a6b8c0d2e4f6g8h0j2k:resolve" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"resolution":"different_person"}'
keenauth connections subject-conflicts resolve conn_01j9xp6q0r1s5t7v9w1x3y5z7b sscf_01j9xr4a6b8c0d2e4f6g8h0j2k \
--resolution different_person --yes