Sicherheit
Passkeys und Zwei-Faktor-Anmeldung (nur im Dashboard).
POST
/api/v1/security/login/passkeyÖffentlich. Prüft die Passkey-Signatur und gibt ein Firebase Custom Token aus (signInWithCustomToken). Die Sitzung gilt als zweifach bestätigt. E-Mail-Bestätigung und Freischaltung werden danach wie gewohnt geprüft.
Ohne Anmeldung.
Body (JSON)
challengeIdstringPflichtmax. 100 ZeichenresponseWebAuthnAuthenticationResponsePflichtidstringPflichtmax. 4096 ZeichenrawIdstringPflichtmax. 4096 Zeichentype"public-key"PflichtresponseobjectPflichtclientDataJSONstringPflichtmax. 4096 ZeichenauthenticatorDatastringPflichtmax. 4096 ZeichensignaturestringPflichtmax. 4096 ZeichenuserHandlestringmax. 1024 Zeichen
authenticatorAttachmentstringclientExtensionResultsobjectStandard: {}
Antwort 200 · MfaSession
customTokenstringPflichtFirebase Custom Token. Mit signInWithCustomToken() anmelden – die neue Sitzung gilt als zweifach bestätigt.method"passkey" | "totp" | "recovery_code"PflichtexpiresAtstringPflichtBis wann die Bestätigung gilt; danach wird der zweite Faktor erneut abgefragt.
curl -X POST 'https://www.debt-flow.io/api/v1/security/login/passkey' \
-H 'Content-Type: application/json' \
-d '{
"challengeId": "string",
"response": {
"id": "string",
"rawId": "string",
"type": "public-key",
"response": {
"clientDataJSON": "string",
"authenticatorData": "string",
"signature": "string",
"userHandle": "string"
},
"authenticatorAttachment": "string",
"clientExtensionResults": {}
}
}'Antwort 200
{
"customToken": "string",
"method": "passkey",
"expiresAt": "string"
}POST
/api/v1/security/login/passkey-optionsÖffentlich. Liefert die Optionen für navigator.credentials.get() (auffindbare Passkeys, Nutzerprüfung erforderlich). Danach POST /security/login/passkey.
Ohne Anmeldung.
Antwort 200 · WebAuthnChallenge
challengeIdstringPflichtBeim Abschluss mitsendenoptionsobjectPflichtAn navigator.credentials (bzw. @simplewebauthn/browser) übergebenexpiresAtstringPflichtZeitpunkt (ISO 8601)
curl -X POST 'https://www.debt-flow.io/api/v1/security/login/passkey-options'Antwort 200
{
"challengeId": "string",
"options": {},
"expiresAt": "string"
}