サブジェクトの競合を解決する
POST /v1/connections/{connection_id}/subject-conflicts/{conflict_id}:resolve · 権限 users:write
未解決の SSO サブジェクトの競合 (接続のサブジェクトの競合を一覧表示する を参照) に対して、管理者の判断を適用します。新しいサブジェクトが誰のものかを ID プロバイダの管理者に確認してから判断してください。
resolution |
意味 | KeenAuth の動作 |
|---|---|---|
same_person |
新しいサブジェクトは同じ人物のものです (たとえば、ID プロバイダでアカウントが作り直された場合)。 | この接続におけるユーザーの古い ID を、新しいサブジェクトに置き換えます。次回以降のサインインから、ユーザーは新しいサブジェクトでサインインします。 |
different_person |
メールアドレスが別の人物に割り当てられました。 | レコードを閉じ、何も紐付けません。新しい人物が既存のアカウントに入ることはありません。 |
different_person を選択したあと、新しい人物が次にサインインすると、新しいレコードが作成されます。新しい人物にサインインを許可するには、既存のアカウントのメールアドレスを変更するか、そのアカウントをブロックまたは削除してください。その後は通常のサインインルールが適用されます。
ID の変更、そのイベント、監査レコードは 1 つのトランザクションで書き込まれます。監査上の実行者は、この呼び出しを行った認証情報です。
同じ判断を繰り返した場合は、何も書き込まれずにレコードが返されます。解決済みのレコードに対して異なる判断を行うと、409 conflict が返されます。再試行時に元のレスポンスを取得するには、Idempotency-Key を送信してください。
リクエスト
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
connection_id |
path | はい | 接続の ID (conn_…)。 |
conflict_id |
path | はい | サブジェクトの競合の 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 の場合で、接続が有効でない、新しいサブジェクトが別のユーザーに紐付けられている、またはユーザーの ID 数の上限に達している場合。same_person の場合、レコードは未解決のまま残ります。 |
| 422 | validation_failed |
resolution がない、または 2 つの値のいずれでもない場合 (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