Ana içeriğe geç

Çok adımlı doğrulama

Çok adımlı doğrulama (MFA), hesap parolasından sonra kimliğin ikinci bir kanıtını ister. TEBHOS bir TOTP doğrulayıcı uygulamasını ve geçiş anahtarları (passkey) gibi WebAuthn kimlik bilgilerini kabul eder. Tek kullanımlık bir yedek kod TOTP kodunun yerine geçer; sudo modu ise API genelinde güvenlik açısından hassas işlemleri korumak için bu faktörleri yeniden kullanır.

Bu sayfadaki tüm yollar yalnızca kullanıcılara açıktır. Bir kullanıcı oturum token'ı (Authorization: Bearer <token>) gerektirir. Geçerli bir Bot <token> kimlik bilgisi 403 ACCESS_DENIED ile reddedilir.

Girişi ikinci bir faktörle tamamlama HTTP kimlik doğrulama sayfasında anlatılır. SMS kodları Telefon doğrulama sayfasında ele alınır ve TEBHOS'ta kullanılamaz.

Doğrulayıcı türleri

Kullanıcı nesnesi, hesabın ikinci faktörlerini authenticator_types alanında bildirir (bkz. doğrulayıcı türleri) ve liste boş değilse mfa_enabled alanını ayarlar.

Değer Ad Eklendiği durum Kaldırıldığı durum
0 TOTP TOTP'yi etkinleştirme başarılı olduğunda TOTP'yi devre dışı bırakma başarılı olduğunda
2 WebAuthn İlk WebAuthn kimlik bilgisi kaydedildiğinde Son WebAuthn kimlik bilgisi silindiğinde

Parolayla giriş, hesapta TOTP etkinse veya en az bir kayıtlı WebAuthn kimlik bilgisi varsa ikinci bir faktör ister. Dolayısıyla kayıtlı bir geçiş anahtarı her zaman ikinci faktördür. Ayrı bir anahtar (switch) yoktur.

Geçiş anahtarları authenticator_types içinde yer almaz

TEBHOS şu anda bir geçiş anahtarını, kullanıcı nesnesinin bildirdiğinden farklı bir iç değerle kaydeder; bu nedenle authenticator_types hiçbir zaman 2 içermez ve tek ikinci faktörü geçiş anahtarları olan bir hesapta mfa_enabled false kalır. Giriş ve sudo modu bundan etkilenmez. Bir hesabın geçiş anahtarı olup olmadığını öğrenmek için Sudo MFA yöntemlerini alma yanıtındaki webauthn alanını okuyun veya kimlik bilgilerini listeleyin.

TEBHOS'ta desteklenmez

WebAuthn iki adımlı doğrulama anahtarı (PUT /users/@me/mfa/webauthn/two-factor), e-postayla gönderilen yedek kod sınaması (/users/@me/mfa/backup-codes/challenge*) ve sudo gövdesi içinde WebAuthn doğrulaması (mfa_method, webauthn_response, webauthn_challenge) yoktur. Geçiş anahtarları sudo modunu bunun yerine bir sudo kanıtı ile kanıtlar.

TOTP parametreleri

TEBHOS bir TOTP kodunu, 30 saniyelik zaman adımı üzerinden altı haneli HMAC-SHA-1 tek kullanımlık parola olarak doğrular ve her iki yönde bir zaman adımı kadar saat kaymasını kabul eder.

Gizli anahtarı TEBHOS üretir. TOTP'yi kurma, yeni bir 160 bitlik Base32 gizli anahtar ve QR kodu için bir otpauth:// URL'si döndürür; gizli anahtarı, TOTP'yi etkinleştirme bir kodla onaylayana kadar şifreli olarak saklar. İstemcinin gönderdiği herhangi bir gizli anahtar yok sayılır.

Bir TOTP kodu iki kez geçebilir

TEBHOS kabul edilen kodları hatırlamaz. Bir kod, kayma penceresinin tamamı boyunca geçerli kalır; bu nedenle aynı kod o pencere içinde yeniden kabul edilebilir.

Yedek kod sözleşmesi

Bir hesap en fazla bir adet 10 yedek koddan oluşan küme tutar. Her kod, küçük harfli Latin alfabesi ve ondalık rakamlardan oluşan, kısa çizgiyle ayrılmış dörder karakterlik iki gruptur; örneğin a3f2-9kd7. TEBHOS kodları, küme daha sonra hangi kodların kullanıldığı bilgisiyle birlikte yeniden gösterilebilecek şekilde saklar.

  • TOTP'yi etkinleştirmek yeni bir küme üretir ve döndürür. Önceki küme varsa değiştirilir.
  • Yeniden oluşturma, kümenin tamamını 10 yeni kodla değiştirir; böylece kaydedilmiş her kod çalışmaz hale gelir.
  • TOTP'yi devre dışı bırakmak, hesap geçiş anahtarlarını korusa bile tüm yedek kodları siler.
  • Bir kodun kullanılması geri alınamaz.

Yedek kod; sudo doğrulama nesnesinin mfa_code alanında, TOTP'yi devre dışı bırakma işleminin code alanında ve HTTP kimlik doğrulama sayfasında anlatılan yedek kodla giriş yolunda kabul edilir.

Boşluklar ve büyük/küçük harf yok sayılır, kısa çizgi yok sayılmaz

TEBHOS, gönderilen yedek koddaki boşlukları kaldırır ve karşılaştırmadan önce kodu küçük harfe çevirir. A3F2-9KD7 ve a3f2 -9kd7, a3f2-9kd7 ile eşleşir. a3f29kd7 eşleşmez.

Doğrulayıcı gizli anahtarları kimlik bilgisidir

TOTP gizli anahtarını ve her yedek kodu günlüklerden, analitikten, URL'lerden ve üçüncü tarafların görebileceği her yerden uzak tutun. Yeniden oluşturulan bir küme öncekinin yerini hemen alır; bu nedenle yanıtı atmadan önce kullanıcının yeni kümeyi saklamasına izin verin.

Sudo modu

Sudo modu, oturumun başındaki kişinin hâlâ hesap sahibi olduğunu gösteren kısa süreli bir kanıttır. TEBHOS bunu sağlamanın birbirinden bağımsız iki yolunu sunar ve sudo korumalı her yol bunlardan yalnızca birini kabul eder.

Mekanizma Nasıl kanıtlanır Kullanan yollar
Satır içi sudo Korunan isteğin JSON gövdesindeki sudo doğrulama nesnesi alanları Korunan yolların çoğu; bu sayfadaki TOTP'yi etkinleştirme (alternatif yol) dışındaki tüm sudo yolları dahil
Sudo yetkisi Aynı oturumdan daha önce yapılmış bir Sudo yetkisi oluşturma çağrısı TOTP'yi etkinleştirme (alternatif yol) ve diğer sayfalardaki birkaç yol

Bir yetki satır içi bir yolu karşılamaz; satır içi alanlar da yetki gerektiren bir yolu karşılamaz.

Kabul edilebilir bir kanıt sunmayan istek 403 SUDO_MODE_REQUIRED ile başarısız olur:

{
  "error": "SUDO_REQUIRED",
  "code": "SUDO_MODE_REQUIRED",
  "message": "Bu işlem güvenlik onayı gerektirir."
}

Gövde kullanılabilir yöntemleri listelemez. Kullanıcıdan hangi kanıtın isteneceğine karar vermek için Sudo MFA yöntemlerini alma çağrısını yapın.

Sunulmuş ama yanlış olan bir kanıt 401 UNAUTHORIZED ile başarısız olur. Bu 401 oturumun geçersiz olduğu anlamına gelmez; bu nedenle istemci buna dayanarak kullanıcının oturumunu kapatmamalıdır.

Kabul edilen kanıt

TEBHOS mevcut olan ilk alanı şu sırayla okur: sudo_proof, ardından boş olmayan bir mfa_code, ardından boş olmayan bir password.

Hesap durumu Kabul edilen kanıt
TOTP yok ve kayıtlı WebAuthn kimlik bilgisi yok password veya kullanılmamış bir yedek kodla mfa_code
TOTP etkin veya en az bir WebAuthn kimlik bilgisi var mfa_code (geçerli bir TOTP kodu veya kullanılmamış bir yedek kod) ya da sudo_proof. Tek başına password 403 SUDO_MODE_REQUIRED ile başarısız olur

mfa_code önce TOTP kodu, ardından yedek kod olarak denetlenir ve eşleşen yedek kod kullanılmış sayılır. sudo_proof, Geçiş anahtarı doğrulamasını denetleme işleminden gelmelidir.

mfa_code yolu, hesap başına 15 dakikada 10 denemelik bir izin miktarından (auth:sudo_mfa) düşer; bu miktar kod denetlenmeden önce harcanır. password yolu 5 dakikada 10 denemeden (auth:sudo_pwd) düşer. Her ikisi de sudo korumalı tüm yollar tarafından paylaşılır.

Sudo doğrulama nesnesi

Satır içi sudo yolları bu alanları kendi JSON gövdeleriyle birleştirir.

Yapı

Alan Tür Açıklama
password? string Hesap parolası. Yalnızca hesabın ikinci faktörü yokken kabul edilir
mfa_code? string Geçerli bir TOTP kodu veya kullanılmamış bir yedek kod. Boşluklar yok sayılır
sudo_proof? string Geçiş anahtarı doğrulamasını denetleme işleminden gelen kanıt. Tek kullanımlıktır ve verilişinden 5 dakika sonra süresi dolar

Sudo yetkisi nesnesi

Yapı

Alan Tür Açıklama
granted_at ISO8601 zaman damgası Yetkinin yazıldığı an
expires_at ISO8601 zaman damgası Yetkinin çalışmayı bıraktığı an; granted_at değerinden 5 dakika sonra

Sudo MFA yöntemleri nesnesi

Yapı

Alan Tür Açıklama
totp boolean Hesapta TOTP'nin etkin olup olmadığı
webauthn boolean Hesabın en az bir kayıtlı WebAuthn kimlik bilgisine sahip olup olmadığı
has_mfa boolean Hesabın herhangi bir ikinci faktöre sahip olup olmadığı: TOTP, bir WebAuthn kimlik bilgisi veya doğrulanmış bir telefon numarası

TEBHOS'ta desteklenmez

Nesnede backup_codes üyesi yoktur. TOTP'si veya geçiş anahtarı olan bir hesap mfa_code alanına her zaman bir yedek kod yazabilir.

MFA yedek kodları nesnesi

Yapı

Alan Tür Açıklama
backup_codes MFA yedek kodu nesnelerinden oluşan dizi Hesabın yedek kodları

Örnek

{
  "backup_codes": [
    {"code": "a3f2-9kd7", "consumed": false},
    {"code": "b81c-4nq0", "consumed": true}
  ]
}

MFA yedek kodu nesnesi

Yapı

Alan Tür Açıklama
code string Tek kullanımlık yedek kod
consumed boolean Kodun daha önce kullanılıp kullanılmadığı

TOTP kurulum nesnesi

Yapı

Alan Tür Açıklama
qr_url string QR kodu olarak çizilmek üzere, yayıncısı Tebhos ve etiketi hesabın kullanıcı adı olan bir otpauth://totp/ URL'si
secret_base32 string Doğrulayıcı uygulamasına elle girilmek üzere aynı gizli anahtarın Base32 biçimi

WebAuthn kimlik bilgisi nesnesi

Bir hesap en fazla 10 WebAuthn kimlik bilgisi tutar.

Yapı

Alan Tür Açıklama
id string Base64url kimlik bilgisi kimliği
name string Kullanıcının verdiği kimlik bilgisi adı (1-64 karakter)
created_at ISO8601 zaman damgası Kimlik bilgisinin kaydedildiği an
last_used_at ?ISO8601 zaman damgası En son başarılı doğrulama; kimlik bilgisi hiç kullanılmadıysa null

TEBHOS kimlik bilgisinin açık anahtarını veya imza sayacını hiçbir zaman döndürmez.

WebAuthn kayıt seçenekleri nesnesi

TEBHOS, bir istemcinin PublicKeyCredentialCreationOptions nesnesini kendisi oluşturması için gereken değerleri döndürür. TEBHOS web istemcisi, TEBHOS'un doğrulayabildiği tek anahtar türleri olan ES256 (-7) ve RS256 (-257) algoritmalarını ister.

Yapı

Alan Tür Açıklama
challenge string 5 dakika geçerli, Base64url tek kullanımlık sınama
rp_id string Güvenen taraf tanımlayıcısı: TEBHOS web uygulamasının ana makine adı, tebhos.com
rp_name string Güvenen tarafın görünen adı, Tebhos
user_id string WebAuthn kullanıcı tanıtıcısı olarak kodlanacak hesap kimliği
user_name string Hesabın e-posta adresi
user_display_name string Hesabın görünen adı
exclude_credential_ids string dizisi Hesaba zaten kayıtlı kimlik bilgilerinin Base64url kimlikleri

WebAuthn doğrulama seçenekleri nesnesi

Yapı

Alan Tür Açıklama
challenge string 5 dakika geçerli, Base64url tek kullanımlık sınama
rp_id string Güvenen taraf tanımlayıcısı, tebhos.com
allow_credential_ids string dizisi Hesaba kayıtlı her kimlik bilgisinin Base64url kimlikleri

Geçiş anahtarı sudo kanıtı nesnesi

Yapı

Alan Tür Açıklama
sudo_proof string Sudo doğrulama nesnesinin sudo_proof alanı için tek kullanımlık kanıt. 5 dakika sonra süresi dolar ve daha yeni bir doğrulama onun yerini alır

Sudo MFA yöntemlerini alma

GET /auth/sudo/mfa-methods

Hesabın hangi kanıtları sunabileceğini açıklayan bir sudo MFA yöntemleri nesnesi döndürür. Sudo modu gerekmez.

Yanıt

Durum Gövde Koşul
200 sudo MFA yöntemleri nesnesi Yöntemler döndürüldü

Hız sınırı

sudo:mfa:methods kovasında kimliği doğrulanmış her kullanıcı için dakikada 20 istek.

Sudo yetkisi oluşturma

POST /auth/sudo

Sudo modunu kanıtlar ve çağıran oturuma 5 dakikalığına verir. Başarılı olursa bir sudo yetkisi nesnesi döndürür.

Yetki, isteği yapan oturum token'ına aittir. Aynı hesabın diğer oturumlarını yükseltmez. Aynı oturumdan yeniden çağırmak yeni bir 5 dakikalık yetki yazar.

JSON gövdesi

Bir sudo doğrulama nesnesi. Kabul edilen kanıt kuralları geçerlidir.

Yanıt

Durum Gövde Koşul
200 sudo yetkisi nesnesi Yetki yazıldı
401 hata yanıtı Parola, kod veya kanıt yanlıştı
403 hata yanıtı Kabul edilebilir kanıt gönderilmedi; SUDO_MODE_REQUIRED döner

Hız sınırı

auth:sudo kovasında her istemci IP'si için 10 saniyede 5 istek; buna ek olarak sudo modu altında açıklanan hesap başına izin miktarları.

Sudo yetkisini iptal etme

DELETE /auth/sudo

Çağıran oturumun varsa sudo yetkisini kaldırır. Boş gövdeyle 204 döndürür.

TOTP'yi kurma

POST /auth/2fa/totp/setup

Yeni bir TOTP gizli anahtarı üretir ve bekleyen olarak saklar. Bir TOTP kurulum nesnesi döndürür. TOTP'yi etkinleştirme gizli anahtarı onaylayana kadar hesapta hiçbir şey değişmez.

Bu işlemi yeniden çağırmak bekleyen gizli anahtarı değiştirir. Gizli anahtar etkinleştirilene kadar hiçbir etkisi olmadığından sudo modu gerekmez.

Yanıt

Durum Gövde Koşul
200 TOTP kurulum nesnesi Bekleyen bir gizli anahtar oluşturuldu
409 hata yanıtı TOTP zaten etkin; TOTP_ALREADY_ENABLED döner

TOTP'yi etkinleştirme

POST /auth/2fa/totp/verify

TOTP'yi kurma işleminden gelen bekleyen gizli anahtarı geçerli bir kodla onaylar ve TOTP'yi etkinleştirir. Satır içi sudo modu gerektirir. Bir User Update Gateway olayı yayar.

Yanıt ayrıca 10 yedek koddan oluşan ilk kümeyi taşır. Önceki küme varsa değiştirilir.

JSON gövdesi

Gövde, sudo doğrulama nesnesini şu alanla genişletir:

Alan Tür Açıklama
code string Bekleyen gizli anahtardan üretilmiş geçerli bir kod (tam olarak 6 karakter). Burada yedek kod kabul edilmez

Yanıt

Durum Gövde Koşul
200 message (string) ve backup_codes (MFA yedek kodu nesnelerinden oluşan dizi) içeren nesne TOTP etkinleştirildi
400 hata yanıtı code 6 karakter değil (VALIDATION) veya bekleyen kurulum yok (TOTP_NOT_SETUP)
401 hata yanıtı TOTP kodu eşleşmedi (INVALID_CODE) veya sudo kanıtı yanlıştı
403 hata yanıtı Sudo modu kanıtlanmadı; SUDO_MODE_REQUIRED döner
409 hata yanıtı TOTP zaten etkin; TOTP_ALREADY_ENABLED döner

TOTP adımından gelen hatalar, code üyesi olmayan {"error": "<CODE>", "message": "..."} gövdesini kullanır.

Hız sınırı

user:mfa:totp:enable kovasında kimliği doğrulanmış her kullanıcı için dakikada 10 istek.

Örnek

curl -X POST https://tebhos.com/api/v1/auth/2fa/totp/verify \
  -H "Authorization: Bearer $TEBHOS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"code": "492039", "password": "correct horse battery staple"}'

TOTP'yi etkinleştirme (alternatif yol)

POST /users/@me/mfa/totp/enable

TOTP'yi etkinleştirme ile aynı işi yapar, ancak sudo modunu satır içi alanlar yerine bir sudo yetkisi ile kanıtlar ve yalnızca MFA yedek kodları nesnesini döndürür.

JSON gövdesi

Alan Tür Açıklama
code string Bekleyen gizli anahtardan üretilmiş geçerli bir kod (1-32 karakter)
secret? string Uyumluluk için kabul edilir ve yok sayılır. TOTP'yi kurma işleminden gelen bekleyen gizli anahtar kullanılır

Yanıt

Durum Gövde Koşul
200 MFA yedek kodları nesnesi TOTP etkinleştirildi ve 10 yedek kod verildi
403 hata yanıtı Oturumda geçerli bir sudo yetkisi yok; SUDO_MODE_REQUIRED döner

Diğer hatalar TOTP'yi etkinleştirme ile aynıdır.

Hız sınırı

user:mfa:totp:enable kovasında kimliği doğrulanmış her kullanıcı için dakikada 10 istek.

TOTP'yi devre dışı bırakma

POST /users/@me/mfa/totp/disable

TOTP'yi devre dışı bırakır ve tüm yedek kodları siler. Boş gövdeyle 204 döndürür. Bir User Update Gateway olayı yayar.

code alanı kimlik kanıtıdır: geçerli bir TOTP kodu veya kullanılmamış bir yedek kod. Başka hiçbir sudo alanı okunmaz.

JSON gövdesi

Alan Tür Açıklama
code string Geçerli bir TOTP kodu veya kullanılmamış bir yedek kod (1-32 karakter). Boşluklar yok sayılır

Yedek kodlar korunmaz

TOTP'yi devre dışı bırakmak, hesap geçiş anahtarlarını korusa bile yedek kod kümesinin tamamını siler. Yeni bir küme vermek için regenerate değeri true olarak MFA yedek kodlarını listeleme çağrısını yapın.

Yanıt

Durum Gövde Koşul
204 boş TOTP devre dışı bırakıldı
401 hata yanıtı Kod ne TOTP ne de bir yedek kodla eşleşti; INVALID_CODE döner

Hız sınırı

user:mfa:totp:disable kovasında kimliği doğrulanmış her kullanıcı için dakikada 10 istek.

MFA yedek kodlarını listeleme

POST /users/@me/mfa/backup-codes

Bir MFA yedek kodları nesnesi döndürür; regenerate true ise önce kümeyi değiştirir. Satır içi sudo modu gerektirir.

Ne TOTP ne de doğrulanmış bir e-posta gerekir; bu nedenle ikinci faktörü olmayan bir hesap sudo modunu parolasıyla kanıtlayıp bir küme oluşturabilir.

Sudo modunu kanıtlamak için mfa_code olarak gönderilen yedek kod kullanılmış sayılır. regenerate false iken bu kod consumed değeri true olarak geri gelir.

JSON gövdesi

Gövde, sudo doğrulama nesnesini şu alanla genişletir:

Alan Tür Açıklama
regenerate? boolean Geçerli kümenin atılıp yerine 10 yeni kod verilip verilmeyeceği. Varsayılan false

Yanıt

Durum Gövde Koşul
200 MFA yedek kodları nesnesi Geçerli veya yeni kodlar döndürüldü
401 hata yanıtı Sudo kanıtı yanlıştı
403 hata yanıtı Sudo modu kanıtlanmadı; SUDO_MODE_REQUIRED döner

Hız sınırı

user:mfa:backup_codes kovasında kimliği doğrulanmış her kullanıcı için dakikada 6 istek; MFA yedek kodlarını yeniden oluşturma ve MFA yedek kodlarını sayma ile paylaşılır.

MFA yedek kodlarını yeniden oluşturma

POST /auth/2fa/backup-codes/regenerate

Yedek kod kümesini 10 yeni kodla değiştirir ve bunları düz string olarak döndürür. Satır içi sudo modu gerektirir. Gövdesiz bir istek, kanıt sunmamış sayılır.

JSON gövdesi

Bir sudo doğrulama nesnesi.

Yanıt

Durum Gövde Koşul
200 codes (string dizisi) ve generated_at (ISO8601 zaman damgası) içeren nesne Küme değiştirildi
403 hata yanıtı Sudo modu kanıtlanmadı; SUDO_MODE_REQUIRED döner

Hız sınırı

user:mfa:backup_codes kovasında kimliği doğrulanmış her kullanıcı için dakikada 6 istek.

MFA yedek kodlarını sayma

GET /auth/2fa/backup-codes/list

Kaç yedek kodun henüz kullanılmadığını, kodları açığa çıkarmadan döndürür. Sudo modu gerekmez.

Yanıt

Durum Gövde Koşul
200 active_count (integer) ve total_count (integer, her zaman 10) içeren nesne Sayı döndürüldü

Hız sınırı

user:mfa:backup_codes kovasında kimliği doğrulanmış her kullanıcı için dakikada 6 istek.

WebAuthn kimlik bilgilerini listeleme

GET /auth/passkeys

Hesabın kimlik bilgilerini en eskiden başlayarak, WebAuthn kimlik bilgisi nesneleriyle {"passkeys": [...]} biçiminde döndürür. Sudo modu gerekmez.

GET /users/@me/mfa/webauthn/credentials aynı kimlik bilgilerini çıplak bir dizi olarak döndürür.

Yanıt

Durum Gövde Koşul
200 passkeys (WebAuthn kimlik bilgisi nesnelerinden oluşan dizi) içeren nesne Kimlik bilgileri döndürüldü; dizi boş olabilir

Hız sınırı

mfa:webauthn:list kovasında kimliği doğrulanmış her kullanıcı için 10 saniyede 40 istek. Her iki yol da bu kovayı paylaşır.

WebAuthn kayıt seçeneklerini oluşturma

POST /auth/passkeys/register-options

Tek kullanımlık bir kayıt sınaması oluşturur ve bir WebAuthn kayıt seçenekleri nesnesi döndürür. Satır içi sudo modu gerektirir. Gövdesiz bir istek, kanıt sunmamış sayılır.

Yeni bir sınama, hesabın önceki kayıt sınamasının yerini alır.

JSON gövdesi

Bir sudo doğrulama nesnesi.

Yanıt

Durum Gövde Koşul
200 WebAuthn kayıt seçenekleri nesnesi Sınama verildi
400 hata yanıtı Hesabın zaten 10 kimlik bilgisi var
403 hata yanıtı Sudo modu kanıtlanmadı; SUDO_MODE_REQUIRED döner

Hız sınırı

mfa:webauthn:registration_options kovasında kimliği doğrulanmış her kullanıcı için 10 saniyede 20 istek.

WebAuthn kimlik bilgisi kaydetme

POST /auth/passkeys/register

Tarayıcının kayıt sınaması için oluşturduğu kimlik bilgisini saklar. Yeni WebAuthn kimlik bilgisi nesnesini last_used_at olmadan döndürür. Tam kimlik bilgisi listesiyle bir WebAuthn Credentials Update Gateway olayı ve bir User Update olayı yayar.

Bu yol hiçbir sudo alanını okumaz. Sınama yalnızca sudo modu gerektiren WebAuthn kayıt seçeneklerini oluşturma işleminden gelebilir.

TEBHOS, istemci verisi türünün webauthn.create olduğunu, sınamasının hesabın geçerli kayıt sınaması olduğunu ve kökeninin TEBHOS web uygulaması (https://tebhos.com) olduğunu denetler. Onay (attestation) beyanı doğrulanmaz. İlk kimlik bilgisi, WebAuthn doğrulayıcı türünü ekler.

JSON gövdesi

Alan Tür Açıklama
name string Kimlik bilgisi adı (kırpıldıktan sonra 1-64 karakter)
credential_id string Tarayıcıdan gelen credential.id, base64url
client_data_json string response.clientDataJSON, base64url
attestation_object string response.attestationObject, base64url

Yanıt

Durum Gövde Koşul
200 WebAuthn kimlik bilgisi nesnesi Kimlik bilgisi kaydedildi
400 hata yanıtı İstemci verisi, sınama veya köken reddedildi, ad aralık dışında ya da hesabın zaten 10 kimlik bilgisi var

Başarısız bir kayıt, sınamayı süresi dolana kadar yerinde bırakır. Herhangi bir hesaba zaten kayıtlı olan bir kimlik bilgisi kimliği yeniden saklanmaz ve istek yine de 200 döndürür.

Hız sınırı

mfa:webauthn:register kovasında kimliği doğrulanmış her kullanıcı için dakikada 10 istek.

WebAuthn kimlik bilgisini yeniden adlandırma

PATCH /auth/passkeys/{credential_id}

Bir kimlik bilgisinin adını değiştirir. Satır içi sudo modu gerektirir. Bir WebAuthn Credentials Update Gateway olayı yayar.

Yol parametreleri

Alan Tür Açıklama
credential_id string Hesaba kayıtlı bir kimlik bilgisinin Base64url kimliği

JSON gövdesi

Gövde, sudo doğrulama nesnesini şu alanla genişletir:

Alan Tür Açıklama
name string Yeni ad (kırpıldıktan sonra 1-64 karakter)

Yanıt

Durum Gövde Koşul
200 message string'i içeren nesne Kimlik bilgisi yeniden adlandırıldı
403 hata yanıtı Sudo modu kanıtlanmadı; SUDO_MODE_REQUIRED döner
404 hata yanıtı Hesapta böyle bir kimlik bilgisi yok

Hız sınırı

mfa:webauthn:update kovasında kimliği doğrulanmış her kullanıcı için 10 saniyede 20 istek.

WebAuthn kimlik bilgisini silme

DELETE /auth/passkeys/{credential_id}

Bir kimlik bilgisini siler. DELETE isteğinin JSON gövdesinde gönderilen satır içi sudo modu gerektirir. Bir WebAuthn Credentials Update Gateway olayı ve bir User Update olayı yayar.

Sudo modu, TEBHOS kimlik bilgisini aramadan önce denetlenir; böylece kanıtsız bir istek kimlik bilgisi hakkında hiçbir şey öğrenemez.

Son kimlik bilgisini kaldırmak bir ikinci faktörü kaldırır

Son WebAuthn kimlik bilgisini silmek, WebAuthn doğrulayıcı türünü kaldırır. TOTP yoksa hesabın artık ikinci faktörü kalmaz ve sudo modu hesap parolasına geri döner.

Yol parametreleri

Alan Tür Açıklama
credential_id string Hesaba kayıtlı bir kimlik bilgisinin Base64url kimliği

JSON gövdesi

Bir sudo doğrulama nesnesi.

Yanıt

Durum Gövde Koşul
200 message string'i içeren nesne Kimlik bilgisi silindi
403 hata yanıtı Sudo modu kanıtlanmadı; SUDO_MODE_REQUIRED döner
404 hata yanıtı Hesapta böyle bir kimlik bilgisi yok

Hız sınırı

mfa:webauthn:delete kovasında kimliği doğrulanmış her kullanıcı için dakikada 10 istek.

Geçiş anahtarı doğrulama seçeneklerini oluşturma

POST /auth/passkeys/assert-options

Oturum açmış bir hesap için tek kullanımlık bir doğrulama sınaması oluşturur ve bir WebAuthn doğrulama seçenekleri nesnesi döndürür. Bir geçiş anahtarını Geçiş anahtarı doğrulamasını denetleme ile sudo kanıtına dönüştürmek için kullanın. Boş bir gövde gönderin.

Yanıt

Durum Gövde Koşul
200 WebAuthn doğrulama seçenekleri nesnesi Sınama verildi
400 hata yanıtı Hesabın kayıtlı kimlik bilgisi yok

Not

POST /auth/sudo/webauthn/authentication-options aynı nesneyi ayrı bir sudo sınamasıyla döndürür, ancak henüz hiçbir TEBHOS yolu bu sınamayı kabul etmez. Bunun yerine bu yolu kullanın.

Geçiş anahtarı doğrulamasını denetleme

POST /auth/passkeys/assert

Geçiş anahtarı doğrulama seçeneklerini oluşturma işleminden gelen sınama için bir WebAuthn doğrulamasını denetler ve bir geçiş anahtarı sudo kanıtı nesnesi döndürür.

TEBHOS; istemci verisi türünün webauthn.get olduğunu, sınama ve kökenin eşleştiğini, kimlik bilgisinin hesaba ait olduğunu ve imzayı denetler. Desteklenen anahtarlar ES256 ve RS256'dır. İmza sayacı saklanan sayaçtan büyük olmalıdır; her ikisinin de sıfır olduğu durum hariçtir, çünkü sayacı olmayan bir doğrulayıcı bu şekilde bildirir. Başarılı olursa sayaç ve last_used_at güncellenir ve sınama tüketilir.

JSON gövdesi

Alan Tür Açıklama
credential_id string Tarayıcıdan gelen credential.id, base64url
client_data_json string response.clientDataJSON, base64url
authenticator_data string response.authenticatorData, base64url
signature string response.signature, base64url

Yanıt

Durum Gövde Koşul
200 geçiş anahtarı sudo kanıtı nesnesi Doğrulama geçerliydi
400 hata yanıtı İstemci verisi, sınama veya köken reddedildi
401 hata yanıtı İmza doğrulanmadı veya sayaç ilerlemedi
404 hata yanıtı Kimlik bilgisi hesaba kayıtlı değil

Hız sınırı

auth:pk_assert kovasında kimliği doğrulanmış her kullanıcı için 5 dakikada 10 istek.

Örnek

const base = "https://tebhos.com/api/v1";
const headers = { Authorization: `Bearer ${token}`, "Content-Type": "application/json" };
const b64u = (buf) => btoa(String.fromCharCode(...new Uint8Array(buf)))
  .replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
const fromB64u = (s) => Uint8Array.from(atob(s.replace(/-/g, "+").replace(/_/g, "/")), (c) => c.charCodeAt(0));

const opts = await fetch(`${base}/auth/passkeys/assert-options`, { method: "POST", headers })
  .then((r) => r.json());

const cred = await navigator.credentials.get({
  publicKey: {
    challenge: fromB64u(opts.challenge),
    rpId: opts.rp_id,
    allowCredentials: opts.allow_credential_ids.map((id) => ({ type: "public-key", id: fromB64u(id) })),
    userVerification: "preferred",
  },
});

const { sudo_proof } = await fetch(`${base}/auth/passkeys/assert`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    credential_id: cred.id,
    client_data_json: b64u(cred.response.clientDataJSON),
    authenticator_data: b64u(cred.response.authenticatorData),
    signature: b64u(cred.response.signature),
  }),
}).then((r) => r.json());

// Use it once, within 5 minutes, on an inline sudo route.
await fetch(`${base}/users/@me/mfa/backup-codes`, {
  method: "POST",
  headers,
  body: JSON.stringify({ regenerate: false, sudo_proof }),
});