Bir bağlantının passkey rpId değerini değiştirin

POST /v1/connections/{connection_id}:change-rp-id · İzin connections:write

Passkey bağlantısını yeni bir rpId'ye taşır ve bir geçiş penceresi başlatır. Bir passkey, kayıt olduğu rpId'ye bağlıdır; bu nedenle kullanıcıların passkey'leri varken rpId'yi değiştirmenin tek yolu budur. settings.rp_id alanını değiştiren bir PATCH isteği 409 rp_id_change_requires_migration ile reddedilir.

Geçiş penceresi boyunca kullanıcılar önceki rpId'nin Passkey'leriyle hâlâ giriş yapabilir ve yeni Passkey'ler yeni rpId üzerinde kaydedilir. Pencere sona erdiğinde veya Bu bağlantının rpId geçişini tamamlayın bağlantısıyla erken sonlandırdığınızda, önceki rpId üzerinde kalan Passkey'ler iptal edilir (neden rp_id_changed). Başka bir oturum açma yöntemi olmayan kullanıcıların o zaman parolasız e-posta ile giriş yapmaya veya hesap kurtarmaya ihtiyacı olur. Bir ortamda aynı anda yalnızca bir geçiş çalışabilir.

Bağlantının rpId'si, geçiş kaydı, yönetim denetim kaydı ve passkey_rp_id.migration_started olayı birlikte yazılır. rpId olan veya çalışan bir geçişin önceki rpId'si olan bir özel alan adı silinemez (409 domain_in_use_by_rp_id).

İstek

Alan Tür Zorunlu Açıklama
connection_id path evet Passkey bağlantı kimliği (conn_…).
If-Match header evet Bağlantının ETag değeri (bkz. Bir bağlantıyı alın).
Idempotency-Key header hayır Yeniden denenen isteği güvenli hale getiren isteğe bağlı anahtar (16-64 karakter).
new_rp_id string evet Yeni rpId: ortamın active durumundaki bir özel alan adının ana bilgisayar adı (küçük harf, IDNA A-etiketi) veya her oturum açma ana bilgisayarını kendi rpId'si olarak kullanmak için boş dize. En fazla 253 bayt.
confirm_rp_id string evet new_rp_id değerinin yeniden yazılmış hali.
migration_window_days integer hayır Önceki rpId'nin Passkey'lerinin kaç gün çalışmaya devam edeceği: 30-365, varsayılan 90.
{
  "new_rp_id": "login.example.com",
  "confirm_rp_id": "login.example.com",
  "migration_window_days": 90
}

Yanıt

200 OK; geçiş ve bağlantının yeni sürümünü içeren bir ETag üstbilgisi.

{
  "id": "rpm_01j9xr4a6b8c0d2e4f6g8h0j2k",
  "connection_id": "conn_01j9xp6q0r1s5t7v9w1x3y5z7b",
  "previous_rp_id": null,
  "new_rp_id": "login.example.com",
  "status": "active",
  "started_at": "2026-10-27T10:00:00Z",
  "ends_at": "2027-01-25T10:00:00Z",
  "completed_at": null,
  "revoked_count": null,
  "new_registration_count": null,
  "fallback_enabled_by_migration": false
}
Alan Açıklama
previous_rp_id, new_rp_id Değişiklikten önceki ve sonraki rpId; null her oturum açma ana bilgisayarının kendi rpId'si olduğu anlamına gelir.
status Pencere çalışırken active; sona erdiğinde completed; erken sonlandırıldığında completed_early.
ends_at Pencerenin planlanan bitiş zamanı.
completed_at, revoked_count, new_registration_count Geçiş kapandığında yazılır; active iken null.
fallback_enabled_by_migration Passkey'ler tek birincil faktör olduğu için pencere boyunca yedek bir oturum açma yöntemi etkinleştirildiyse true.

Hatalar

HTTP kod Ne zaman
400 unknown_field İstek gövdesi bilinmeyen bir alan içeriyor.
404 not_found Bağlantı yok veya başka bir ortama ait.
409 rp_id_migration_in_progress Bu ortamda başka bir rpId geçişi çalışıyor.
412 precondition_failed If-Match geçerli sürümle eşleşmiyor.
422 validation_failed Bir alan eksik, çok uzun veya aralık dışında; new_rp_id ortamın active durumundaki bir özel alan adı değil ya da mevcut rpId'ye eşit; confirm_rp_id farklı; ya da bağlantı bir passkey bağlantısı değil (errors[].pointer: /new_rp_id, /confirm_rp_id, /migration_window_days, /connection_id).
428 precondition_required If-Match üstbilgisi eksik.
401 unauthenticated Kimlik bilgisi eksik, geçersiz veya iptal edilmiş.
403 insufficient_permissions Kimlik bilgisi gerekli izne sahip değil.
429 rate_limited Hız sınırı aşıldı; Retry-After süresinden sonra yeniden deneyin.
503 service_unavailable Bir bağımlılık geçici olarak kullanılamıyor; Retry-After süresinden sonra yeniden deneyin.

Örnek

curl -X POST "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b:change-rp-id" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H 'If-Match: "3"' \
  -H "Content-Type: application/json" \
  -d '{"new_rp_id":"login.example.com","confirm_rp_id":"login.example.com"}'
keenauth connections change-rp-id conn_01j9xp6q0r1s5t7v9w1x3y5z7b --if-match '"3"' --yes \
  --data '{"new_rp_id":"login.example.com","confirm_rp_id":"login.example.com"}'