WebAuthn | Rejestracja

Rejestracja WebAuthn obejmuje klienta (przeglądarkę), urządzenie uwierzytelniające (urządzenie zabezpieczające) oraz stronę ufającą (RP; serwer Delphi/C++Builder TsgcWSAPIServer_WebAuthn).

 

Opcje rejestracji

 

Tworzenie nowych danych uwierzytelniających użytkownika zazwyczaj wymaga zainicjowania przez klienta przepływu rejestracji za pomocą nowego żądania HTTP do punktu końcowego opcji rejestracji skonfigurowanego na serwerze TsgcWSAPIServer_WebAuthn. Domyślnie punkt końcowy to /sgcWebAuthn/Registration/Options; jeśli serwer nasłuchuje pod domeną https://www.test.com, klient powinien wysłać nowe żądanie pod adres URL https://www.test.com/sgcWebAuthn/Registration/Options.

 

Klient wysyła nowe żądanie, przekazując jako ładunek następujący JSON (używając „test" jako nazwy użytkownika)

 

{"username":"test","algorithms":[]}

 

Serwer odczytuje żądanie i zwraca odpowiedź z nowym wyzwaniem.

 

{
"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
}
}

 

Odpowiedź zwraca następujące dane:

 

 

 

Weryfikacja rejestracji

 

Teraz klient otrzymuje odpowiedź z serwera, odczytuje ją, a uwierzytelniacz zwraca dane kryptograficzne do przeglądarki klienta. Klient wysyła nowe żądanie HTTP z następującymi danymi do punktu końcowego weryfikacji rejestracji skonfigurowanego w serwerze TsgcWSAPIServer_WebAuthn; domyślnie jest to /sgcWebAuthn/Registration/Verify

, więc jeśli serwer nasłuchuje w domenie https://www.test.com, klient powinien wysłać nowe żądanie pod adres URL https://www.test.com/sgcWebAuthn/Registration/Verify.

 

Authenticator odpowiada z powrotem do kodu JavaScript w przeglądarce za pomocą:

 

 

Poniżej znajduje się przykład:

 

{
"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"
}

 

Serwer odczytuje żądanie JSON od klienta, a następnie dekoduje, weryfikuje i przechowuje klucz publiczny oraz identyfikator poświadczeń.

 

Dekoduj attestationObject i clientDataJSON:

 

 

Przechowaj poświadczenie:

 

 

 

 

Przepływ rejestracji

Więcej informacji na temat procesu rejestracji można znaleźć pod następującymi linkami: