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.