WebAuthn-Authentifizierung ermöglicht es Benutzern, sich mit zuvor registrierten Public-Key-Credentials anzumelden. Dabei wird eine signierte Challenge mit dem gespeicherten öffentlichen Schlüssel des Benutzers aus der Registrierung validiert.
Authentifizierungsoptionen
Für die Authentifizierung muss der Client den Authentifizierungsablauf mit einer neuen HTTP-Anfrage an den im TsgcWSAPIServer_WebAuthn-Server konfigurierten Authentication Options Endpoint starten. Standardmäßig lautet der Endpunkt /sgcWebAuthn/Authentication/Options, wenn Ihr Server also in der Domain https://www.test.com lauscht, sollte der Client eine neue Anfrage an die URL https://www.test.com/sgcWebAuthn/Authentication/Options stellen.
Der Client sendet die Assertion (Authentifizierungsantwort) über POST an den Server
{"username":"test","user_verification":"preferred"}
Der Server generiert PublicKeyCredentialRequestOptions
{
"challenge": "9d0d61edf30b45f8b88aef7087f9117716e2b7d8b0ee4460b06142f39dd0ec9f",
"timeout": 60000,
"rpId": "localhost",
"allowCredentials": [
{
"id": "yeA4BVRlrAfLG-KzqsL_rlI4ffhuKHK8uoEkVoab065UkS82Zqlh9VFQHIYwOuOo",
"type": "public-key",
"transports": [
"nfc",
"usb"
]
}
],
"userVerification": "preferred",
"hints": [],
"attestation": "none",
"attestationFormats": [],
"extensions": {}
}
Authentication Verify
Die Authentifizierung erfordert, dass der Client den Authentifizierungsablauf mit einer neuen HTTP-Anfrage an den im TsgcWSAPIServer_WebAuthn-Server konfigurierten Authentication Verify Endpoint startet. Standardmäßig ist der Endpunkt /sgcWebAuthn/Authentication/Verify; wenn Ihr Server also in der Domain https://www.test.com lauscht, sollte der Client eine neue Anfrage an die URL https://www.test.com/sgcWebAuthn/Authentication/Verify stellen.
Der Browser fordert den Benutzer auf, seinen Authenticator zu verwenden (z. B. Fingerabdruck, YubiKey). Der Authenticator signiert die Challenge mit dem privaten Schlüssel, der mit der Credential-ID verknüpft ist. Das zurückgegebene Credential enthält:
Unten finden Sie ein JSON-Beispiel der Client-Anfrage:
{
"id": "yeA4BVRlrAfLG-KzqsL_rlI4ffhuKHK8uoEkVoab065UkS82Zqlh9VFQHIYwOuOo",
"rawId": "yeA4BVRlrAfLG-KzqsL_rlI4ffhuKHK8uoEkVoab065UkS82Zqlh9VFQHIYwOuOo",
"response": {
"authenticatorData": "SZYN5YgOjGh0NBcPZHZgW4_krrmihjLHmVzzuoMdl2MFAAAABw",
"clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uZ.....",
"signature": "MEQCIAJRqvvys8....",
"userHandle": "36b9d6a84204487382fee62e7e67a80d"
},
"type": "public-key",
"clientExtensionResults": {},
"authenticatorAttachment": "cross-platform"
}
Der Server liest den Request des Clients, validiert, dass das Credential gespeichert ist, und verifiziert die Signatur. Wenn die Signatur gültig ist, wird das Ereignis OnWebAuthnAuthenticationSuccessful aufgerufen.
Weitere Informationen zum Authentifizierungsablauf erhalten Sie über die folgenden Links: