Ç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¶
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¶
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¶
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 }),
});