Dokümantasyon

Tarayıcıyı QR koduyla eşleme

Sayfanız bir QR kodu gösterir, kişi onu Touchque uygulamasıyla okutur ve onay yalnızca okutan telefona, bir kez, numara eşleştirmeyle sorulur. Kullanıcı adı yazılmaz ve bir oltalama sayfası onayı ödünç alamaz: QR bu tarayıcının anahtarına bağlıdır ve istek yalnızca onu okuyan telefona gider.

Nasıl çalışır
  1. Sayfa, tarayıcı anahtarının parmak izini (@touchque/web browserKey.thumbprint()) sunucunuza gönderir.
  2. Sunucunuz qrPairings.create'i çağırır: SDK bir nonce üretir, yalnızca SHA-256 özetini gönderir ve uri'yi (touchque://pair-browser?…) döndürür. Onu QR olarak gösterin; nonce sunucunuzdan hiç çıkmaz.
  3. confirmed olana kadar qrPairings.get ile yoklayın, sonra qrPairing ile login.request gönderin: Touchque yalnızca o telefona, okuttuğu kullanıcı için, bir kez sorar.
Durumlar
stateAnlam
waitingGösteriliyor, henüz okutulmadı.
scannedKullanıcılarınızdan birinin hesabı olan bir telefon okuttu; kişi henüz onaylamadı.
confirmedKişi telefonda onayladı: externalUsername kim olduğunu, proximity telefonun ne kadar yakın olduğunu (aynı ağ, aynı ülke) söyler. Giriş isteğini şimdi gönderin.
requestedGiriş isteği o telefona gitti (requestId); her zamanki gibi bekleyin.
approvedTelefonda onaylandı.
refusedSunucunuz hayır dedi (refuse); telefon sebebinizi ve mesajınızı gösterir.
reportedKişi birinin okutmasını söylediğini bildirdi: 2FA'sı dondurulur.
expiredttlSeconds içinde kullanılmadı (30–300, varsayılan 120).
Önce kendi kontrolleriniz. Kurallarınız bu tarayıcıya hayır diyorsa (onaylanmamış bilgisayar, fazla tarayıcı, hız sınırları) qrPairings.refuse'u bir sebeple (policy, device_not_approved, too_many_browsers, rate_limited, no_account, other) ve kısa bir mesajla çağırın: telefon kişiye nedenini söyler. Okutmadan sonra, giriş isteğinden önce çalışır.
// Sayfa (@touchque/web): tarayıcı anahtarının parmak izi
import { browserKey } from '@touchque/web';
await browserKey.proof();                          // anahtar yoksa oluşturur
const keyThumbprint = await browserKey.thumbprint();

// Sunucunuz (Node)
const p = await tq.qrPairings.create({ keyThumbprint, clientIp: req.ip, userAgent: req.get('user-agent') });
// p.uri'yi (touchque://pair-browser?…) QR olarak gösterin, sonra yoklayın:
const now = await tq.qrPairings.get(p.pairingId);   // waiting → scanned → confirmed
if (now.state === 'confirmed') {
  await tq.login.request({ externalUsername: now.externalUsername, type: 'LOGIN', qrPairing: p.pairingId });
}
// ya da kendi kontrolleriniz hayır dediyse:
await tq.qrPairings.refuse(p.pairingId, { reason: 'device_not_approved', message: 'Ask IT to approve this computer.' });