Passkey kaydet

POST /fapi/v1/me/passkeys · ortamın oturum açma ana bilgisayarından çağrılır

POST /fapi/v1/me/passkeys/registration-options ile başlatılan kaydı tamamlar: tarayıcının yanıtını doğrular, Passkey'i veya güvenlik anahtarını saklar ve döndürür. Kullanıcıya yeni oturum açma yöntemi hakkında bir güvenlik e-postası gönderilir; bu e-posta kapatılamaz. Kimliği doğrulanmış kullanıcının __Host-idp_session çerezi gereklidir; çerez yoksa, süresi dolmuşsa veya iptal edilmişse 401 unauthenticated döner. Farklı bir kaynaktaki birinci taraf uygulama bunun yerine ön uç API erişim belirtecini gönderebilir (DPoP kanıtıyla birlikte Authorization: DPoP <token>; bkz. Ön uç API erişim belirteci).

Oturum kuralları başlatma çağrısındakilerle aynıdır: son 10 dakika içinde doğrulanmış olmalı ve kullanıcının ikinci bir faktörü varsa bu faktörle açılmış olmalıdır.

İstek

Başlıklar:

Başlık Zorunlu Açıklama
Idp-Client evet SDK tanımlayıcısı.
Origin evet Tam olarak https://<oturum açma ana bilgisayarı> olmalıdır.
Content-Type evet application/json.

Gövde:

Alan Tür Zorunlu Açıklama
ceremony_id string evet Başlatma çağrısının ceremony_id değeri.
credential object evet navigator.credentials.create sonucu JSON olarak (PublicKeyCredential.toJSON()), en fazla 16 KiB.

Yanıt

201 Created, yeni kimlik doğrulayıcı:

{
  "id": "cred_01j9zzzzzzzzzzzzzzzzzzzzzz",
  "type": "passkey",
  "label": "iCloud Keychain",
  "status": "active",
  "synced": true,
  "created_at": "2026-10-12T09:00:00Z",
  "last_used_at": null
}

Hatalar

Reddedilen bir kayıt başarısız deneme olarak sayılmaz; yeni bir kayıtla yeniden başlatın.

Durum Kod Ne zaman
400 malformed_request Gövde geçerli bir JSON değil.
400 unknown_field Gövdede ceremony_id ve credential dışında bir alan var.
401 unauthenticated Geçerli bir oturum çerezi yok.
401 step_up_required Oturum çok eski veya ikinci bir faktör gerekiyor; WWW-Authenticate başlığındaki değerlerle yeniden doğrulayın.
403 origin_not_allowed Origin eksik veya yanlış.
409 credential_already_registered Bu kimlik doğrulayıcı ortamda zaten kayıtlı.
409 credential_limit_reached Kullanıcının zaten izin verilen en fazla sayıda Passkey'i ve güvenlik anahtarı var.
413 payload_too_large Gövde çok büyük.
415 unsupported_media_type Content-Type application/json değil.
422 validation_failed /ceremony_id: kayıt bilinmiyor, süresi dolmuş, daha önce kullanılmış veya başka bir oturuma ait. /credential: yanıt eksik veya doğrulanamıyor.
422 device_bound_passkey_required Ortam yalnızca tek bir cihazda kalan Passkey'lere izin veriyor.
422 aaguid_not_allowed Ortam bu kimlik doğrulayıcı modeline izin vermiyor.
422 attestation_untrusted Ortam güvenilir bir attestation istiyor ve bu güvenilir değil.

Örnek

curl -X POST https://example.keenauth.app/fapi/v1/me/passkeys \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -H "Content-Type: application/json" \
  -b cookies.txt \
  -d '{"ceremony_id": "CQAAAAAAAAAAAAAAAAAAAA", "credential": {"id": "…", "rawId": "…", "type": "public-key", "response": {"clientDataJSON": "…", "attestationObject": "…"}}}'

Kişisel veriler

Bu uç nokta kişisel veri içerir: kimlik bilgileri. KeenAuth API'lerinde kişisel veriler bölümünde neyin saklandığı, ne kadar süreyle tutulduğu ve nasıl silindiği açıklanmaktadır. Hiçbir alanda özel nitelikli kişisel verileri (sağlık, biyometrik veriler, din, siyasi görüşler, cinsel yönelim) göndermeyin.