Skip to Content

SMS OTP

Auris unterstützt SMS-Einmalkennwörter (OTP) in zwei Modi:

  • Passwortlos: Der Benutzer gibt seine Telefonnummer ein, erhält einen SMS-Code und authentifiziert sich ohne Passwort
  • Zwei-Faktor-Authentifizierung (2FA): Der Benutzer schließt die Passwort-Anmeldung ab und erhält dann einen SMS-Code als zweiten Faktor

Beide Modi verwenden denselben zugrunde liegenden Mechanismus — einen kurzlebigen numerischen Code, der über Twilio geliefert wird. Der Modus wird durch die Art der Initiierung des Flows bestimmt.


Twilio-Einrichtung

Auris verwendet Twilio als SMS-Anbieter. Du benötigst ein Twilio-Konto mit einer Telefonnummer oder einem Messaging-Service.

Twilio-Konto erstellen

Falls du noch keines hast, registriere dich auf twilio.com . Schließe die Telefonnummer-Verifizierung ab.

Anmeldeinformationen abrufen

Notiere dir aus dem Twilio-Console-Dashboard deine Account SID und dein Auth Token.

Twilio-Telefonnummer erhalten

Kaufe unter Phone Numbers → Manage → Buy a number eine Nummer mit SMS-Funktion. Alternativ kannst du einen Messaging Service für bessere Zustellbarkeit und Sender-Pool-Verwaltung erstellen.

In der Auris Console konfigurieren

Gehe zu Console → Authentication → SMS und gib ein:

  • Account SID — aus dem Twilio-Dashboard
  • Auth Token — aus dem Twilio-Dashboard
  • Sender — deine Twilio-Telefonnummer (E.164-Format, z. B. +15551234567) oder deine Messaging Service SID (beginnt mit MG)

Speichern und testen

Klicke auf Save und verwende dann die Schaltfläche Send Test SMS, um die Konfiguration mit deiner eigenen Telefonnummer zu verifizieren.

OTP-Codes sind 6-stellige numerische Codes, die 10 Minuten gültig sind. Das Code-Format und die Ablaufzeit sind in der aktuellen Version nicht konfigurierbar.


SMS als passwortlose Anmeldung

In diesem Modus authentifiziert sich der Benutzer ausschließlich mit seiner Telefonnummer und dem OTP-Code — kein Passwort erforderlich.

Voraussetzungen

  • Die Telefonnummer des Benutzers muss bereits registriert und auf seinem Konto verifiziert sein. Telefonnummern können nicht als Teil eines passwortlosen Erst-Flows erfasst werden.
  • SMS-Passwortlos muss in Console → Authentication → Passwordless → SMS OTP aktiviert sein.

Flow

Benutzer gibt Telefonnummer ein

Deine Anwendung erfasst die Telefonnummer des Benutzers (E.164-Format) und ruft den Sende-OTP-Endpunkt auf.

OTP wird gesendet

Auris generiert einen 6-stelligen Code, speichert dessen SHA-256-Hash und sendet ihn über Twilio.

Benutzer gibt den Code ein

Deine Anwendung zeigt eine Eingabe für den 6-stelligen Code an und sendet ihn an den Verifizierungs-Endpunkt.

Authentifizierung ist abgeschlossen

Auris validiert den Code und stellt ein Access Token und Refresh Token aus.

API-Verwendung

POST/api/user/phone/send-otp

Sendet ein OTP an die angegebene Telefonnummer zur passwortlosen Authentifizierung. Body: { phone: string } (E.164-Format). Rate Limited: 5 Codes pro Stunde, 30-Sekunden-Abklingzeit.

POST/api/user/phone/verify-otp

Verifiziert das OTP und stellt Tokens aus. Body: { phone: string, code: string }. Maximal 5 Verifizierungsversuche pro Code.


SMS als Zwei-Faktor-Authentifizierung (2FA)

In diesem Modus ist SMS OTP ein zweiter Faktor. Der Benutzer schließt zunächst die E-Mail/Passwort- (oder Social-)Authentifizierung ab, und wenn 2FA erforderlich ist, liefert Auris einen SMS-Code, bevor Tokens ausgestellt werden.

SMS-2FA aktivieren

Pro Benutzer (Self-Service): Der Benutzer aktiviert SMS-2FA aus seinen Konto-Sicherheitseinstellungen:

import { useAuris } from '@auris/react' function SmsTwoFactorSetup() { const { getAccessToken } = useAuris() const [step, setStep] = useState('phone') // 'phone' | 'verify' | 'done' const [phone, setPhone] = useState('') const [code, setCode] = useState('') async function setPhoneNumber() { const token = await getAccessToken() await fetch('/api/user/phone', { method: 'POST', headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ phoneNumber: phone }), }) setStep('verify') } async function verifyAndEnable() { const token = await getAccessToken() await fetch('/api/user/phone/verify', { method: 'POST', headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ code }), }) await fetch('/api/user/2fa/sms', { method: 'POST', headers: { Authorization: `Bearer ${token}` }, }) setStep('done') } if (step === 'phone') { return ( <form onSubmit={(e) => { e.preventDefault(); setPhoneNumber() }}> <input type="tel" placeholder="+15551234567" value={phone} onChange={(e) => setPhone(e.target.value)} /> <button type="submit">Verifizierungscode senden</button> </form> ) } if (step === 'verify') { return ( <form onSubmit={(e) => { e.preventDefault(); verifyAndEnable() }}> <input placeholder="6-stelliger Code" value={code} onChange={(e) => setCode(e.target.value)} maxLength={6} /> <button type="submit">SMS-2FA verifizieren und aktivieren</button> </form> ) } return <p>SMS-Zwei-Faktor-Authentifizierung ist jetzt aktiviert.</p> }

Der 2FA-Login-Flow

Während eines Logins, bei dem SMS-2FA erforderlich ist, verwaltet die gehostete Login-Seite den zweiten Faktor automatisch. Falls du eine benutzerdefinierte Login-Oberfläche direkt über die API implementierst:

POST/api/user/2fa/sms/send

Sendet ein SMS-OTP an die verifizierte Telefonnummer des authentifizierten Benutzers. Erfordert ein Partial-Session-Token, das nach der Erstauthentifizierung ausgestellt wurde.

POST/api/auth/verify-2fa

Sendet den 2FA-Code. Body: { code: string, method: 'sms' }. Bei Erfolg werden vollständige Access- und Refresh-Tokens ausgestellt.


Telefonnummern-Verwaltung

Benutzer verwalten ihre Telefonnummer über die Kontoeinstellungen. Das Telefon muss per OTP verifiziert werden, bevor es zur Authentifizierung verwendet werden kann.

POST/api/user/phone

Setzt oder aktualisiert die Telefonnummer des authentifizierten Benutzers. Akzeptiert das E.164-Format (z. B. +15551234567). Sendet sofort ein Verifizierungs-OTP.

POST/api/user/phone/verify

Verifiziert das an die neue Telefonnummer gesendete OTP. Body: { code: string }. Markiert die Telefonnummer als verifiziert.

DELETE/api/user/phone

Entfernt die Telefonnummer vom Konto des authentifizierten Benutzers. Deaktiviert automatisch SMS-2FA, falls aktiviert.


Rate Limits

Auris setzt strenge Rate Limits für SMS-Endpunkte durch, um Missbrauch zu verhindern und Twilio-Kosten zu kontrollieren:

LimitWert
OTP-Anfragen pro Telefon pro Stunde5
Abklingzeit zwischen Sendungen30 Sekunden
Maximale Verifizierungsversuche pro Code5
Code-Gültigkeit10 Minuten

Nach 5 fehlgeschlagenen Verifizierungsversuchen wird der Code ungültig. Der Benutzer muss einen neuen Code anfordern.

Nach Erreichen des Stundenlimits gibt der Endpunkt eine 429 Too Many Requests-Antwort mit einem Retry-After-Header zurück, der angibt, wann das Limit zurückgesetzt wird.


Sicherheitsüberlegungen

E.164-Validierung — Telefonnummern werden bei der Eingabe gegen das E.164-Format validiert. Ungültige Formate werden abgelehnt, bevor eine SMS gesendet wird.

Verifizierung des Telefon-Eigentums — Auris erfordert OTP-Verifizierung, bevor eine Telefonnummer als verifiziert markiert wird. Eine Telefonnummer kann erst zur Authentifizierung verwendet werden, wenn sie verifiziert wurde.

Code-Hashing — OTP-Codes werden als SHA-256-Hashes gespeichert. Der Rohcode ist nur in der SMS-Nachricht vorhanden — nie in der Auris-Datenbank.

SIM-Swap-Risiko — SMS OTP ist weniger widerstandsfähig gegen SIM-Swap-Angriffe als TOTP oder WebAuthn. Erwäge für Anwendungen mit hochwertigen Konten die Verwendung von Passkeys / WebAuthn oder TOTP als 2FA-Methode.

SMS-Authentifizierung ist anfällig für SIM-Swap- und SS7-Abfangangriffe. Für Konten, die starke Sicherheitsgarantien erfordern, werden WebAuthn-Passkeys oder Hardware-Sicherheitsschlüssel als 2FA-Methode empfohlen.


Verwandte Anleitungen