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 mitMG)
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
/api/user/phone/send-otpSendet ein OTP an die angegebene Telefonnummer zur passwortlosen Authentifizierung. Body: { phone: string } (E.164-Format). Rate Limited: 5 Codes pro Stunde, 30-Sekunden-Abklingzeit.
/api/user/phone/verify-otpVerifiziert 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:
React
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:
/api/user/2fa/sms/sendSendet ein SMS-OTP an die verifizierte Telefonnummer des authentifizierten Benutzers. Erfordert ein Partial-Session-Token, das nach der Erstauthentifizierung ausgestellt wurde.
/api/auth/verify-2faSendet 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.
/api/user/phoneSetzt oder aktualisiert die Telefonnummer des authentifizierten Benutzers. Akzeptiert das E.164-Format (z. B. +15551234567). Sendet sofort ein Verifizierungs-OTP.
/api/user/phone/verifyVerifiziert das an die neue Telefonnummer gesendete OTP. Body: { code: string }. Markiert die Telefonnummer als verifiziert.
/api/user/phoneEntfernt 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:
| Limit | Wert |
|---|---|
| OTP-Anfragen pro Telefon pro Stunde | 5 |
| Abklingzeit zwischen Sendungen | 30 Sekunden |
| Maximale Verifizierungsversuche pro Code | 5 |
| Code-Gültigkeit | 10 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
- Passkeys / WebAuthn — Stärkere 2FA mit Biometrie und Hardware-Keys
- Magic Links — E-Mail-basierte passwortlose Authentifizierung
- Hosted Login (PKCE) — Der vollständige Authentifizierungs-Flow für die Produktion