An der WebAuthn-Registrierung sind der Client (Browser), der Authenticator (Sicherheitsgerät) und die Relying Party (RP; TsgcWSAPIServer_WebAuthn Delphi/C++Builder-Server) beteiligt.
Registrierungsoptionen
Das Erstellen einer neuen Benutzeranmeldeinformation erfordert üblicherweise, dass der Client den Registrierungsablauf mit einer neuen HTTP-Anfrage an den im TsgcWSAPIServer_WebAuthn-Server konfigurierten Registration Options Endpoint startet. Standardmäßig ist der Endpunkt /sgcWebAuthn/Registration/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/Registration/Options stellen.
Der Client sendet eine neue Anfrage und übergibt als Nutzlast das folgende JSON (mit test als Benutzername)
{"username":"test","algorithms":[]}
Der Server liest die Anfrage und gibt eine Antwort mit einer neuen Challenge zurück.
{
"rp": {
"name": "localhost",
"id": "localhost"
},
"user": {
"id": "36b9d6a84204487382fee62e7e67a80d",
"name": "test",
"displayName": "test"
},
"challenge": "6c6c468c99f24bf29a85a15b661f75f385654f97309c46bab2909c926e17ccbe",
"pubKeyCredParams": [
{
"type": "public-key",
"alg": "-7"
},
{
"type": "public-key",
"alg": "-257"
}
],
"timeout": 60000,
"excludeCredentials": [],
"authenticatorSelection": {
"residentKey": "preferred",
"requireResidentKey": false,
"userVerification": "preferred"
},
"attestation": "direct",
"hints": [],
"extensions": {
"credProps": true
}
}
Die Antwort gibt die folgenden Daten zurück:
Registration Verify
Jetzt hat der Client die Antwort vom Server, liest die Antwort, und der Authenticator gibt die kryptografischen Daten an den Client-Webbrowser zurück. Jetzt sendet der Client eine neue HTTP-Anfrage mit den folgenden Daten an den Registration-Verify-Endpunkt, der im TsgcWSAPIServer_WebAuthn-Server konfiguriert ist, standardmäßig /sgcWebAuthn/Registration/Verify
, sodass der Client, wenn Ihr Server in der Domain https://www.test.com lauscht, eine neue Anfrage an die URL https://www.test.com/sgcWebAuthn/Registration/Verify stellen sollte.
Der Authenticator antwortet dem JavaScript im Browser mit:
Nachfolgend ein Beispiel:
{
"id": "yeA4BVRlrAfLG-KzqsL_rlI4ffhuKHK8uoEkVoab065UkS82Zqlh9VFQHIYwOuOo",
"rawId": "yeA4BVRlrAfLG-KzqsL_rlI4ffhuKHK8uoEkVoab065UkS82Zqlh9VFQHIYwOuOo",
"response": {
"attestationObject": "o2NmbXRmcGFja2VkZ2F0dFN0....",
"clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uY3Jl....",
"transports": [
"nfc",
"usb"
],
"publicKeyAlgorithm": -7,
"publicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj....",
"authenticatorData": "SZYN5YgOjGh0NBcPZHZgW4_k...."
},
"type": "public-key",
"clientExtensionResults": {
"credProps": {
"rk": true
}
},
"authenticatorAttachment": "cross-platform"
}
Der Server liest den JSON-Request des Clients und decodiert, verifiziert und speichert den öffentlichen Schlüssel und die Credential-ID.
attestationObject und clientDataJSON decodieren:
Anmeldedaten speichern:
Weitere Informationen zum Registrierungsablauf finden Sie über die folgenden Links: