Oltalamaya dayanıklılık
Uçtan uca şifreleme telefon ile Touchque arasındaki hattı korur. Oltalama ise kullanıcının tarayıcısı ile sitenizin arasına girer: sahte bir alan adı her şeyi gerçek sitenize iletir. NIST SP 800-63B-4 yalnızca çıktısı sitenin adresine kriptografik olarak bağlı yöntemleri oltalamaya dayanıklı sayar; Touchque'da bu passkey'dir.
| Yöntem | Oltalamaya dayanıklı | Neden |
|---|---|---|
| Passkey | Evet | Tarayıcı sitenizin gerçek adresini imzalar; benzer alan adındaki sahte site bu imzayı kullanamaz. |
| Push + sayı eşleştirme | Hayır (AAL2) | Gerçek zamanlı proxy gerçek sayıyı gösterebilir. Push yorgunluğunu engeller, aktarmayı engellemez. |
| Çevrimdışı QR kodu | Hayır (AAL2) | Kodu kullanıcı yazar; proxy iletebilir. Tutar ve alıcıyı bağlar. |
| Zaman tabanlı / kurtarma kodu | Hayır | Yazılan kodlar süreleri içinde iletilebilir. |
1) App user policy → "Passkeys on your site": alan adınızı (RP ID) ve giriş sayfası adreslerini girin. 2) Kullanıcılar passkey kaydeder. 3) İsterseniz "kritik işlemlerde passkey zorunlu" politikasını açın: bu işlemlerde push gönderilmez, yanıt requiresPasskey: true olur. 4) Oturumu yüksek güvenceli saymadan önce durum/webhook içindeki assurance.phishingResistant değerine bakın.
Touchque uygulaması bir passkey sağlayıcısıdır (iOS 17+). Kullanıcılar passkey'i Touchque'ya kaydedebilir; bilgisayardaki girişte tarayıcının gösterdiği QR'ı iPhone ile okutur, Bluetooth yakınlığı ve Face ID ile onaylar. Anahtar telefonun Secure Enclave'inde kalır. Sizin tarafınızda ek kod gerekmez; bu passkey'ler "Touchque" etiketiyle ve cihaza bağlı olarak kaydedilir.
Passkey zorunluyken
const { Touchque, TouchquePasskeyRequiredError } = require('@touchque/node');
try {
await tq.login.verify({ externalUsername, type: 'WITHDRAW', details });
} catch (err) {
if (err instanceof TouchquePasskeyRequiredError) {
// browser: await tq.passkeys.approveLogin({ requestId: err.requestId })
return res.status(409).json({ passkeyRequired: true, requestId: err.requestId });
}
throw err;
}Durum / webhook
{
"status": "CONFIRMED",
"confirmedVia": "WEBAUTHN",
"assurance": { "phishingResistant": true, "method": "passkey" }
}