WebAuthn | Uwierzytelnianie

Uwierzytelnianie WebAuthn umożliwia użytkownikom logowanie się przy użyciu wcześniej zarejestrowanych poświadczeń klucza publicznego. Polega na walidacji podpisanego wyzwania przy użyciu przechowywanego klucza publicznego użytkownika z rejestracji.

 

 

Opcje uwierzytelniania

 

Uwierzytelnianie wymaga, aby klient zainicjował przepływ uwierzytelniania przy użyciu nowego żądania HTTP do punktu końcowego opcji uwierzytelniania skonfigurowanego na serwerze TsgcWSAPIServer_WebAuthn. Domyślnie punktem końcowym jest /sgcWebAuthn/Authentication/Options, więc jeśli serwer nasłuchuje pod adresem https://www.test.com, klient powinien wysłać nowe żądanie do adresu URL https://www.test.com/sgcWebAuthn/Authentication/Options.

 

Klient wysyła potwierdzenie (odpowiedź uwierzytelniania) do serwera przez POST

 

{"username":"test","user_verification":"preferred"}

 

Serwer generuje 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": {}
}

 

 

Weryfikacja uwierzytelniania

 

Uwierzytelnianie wymaga, aby klient zainicjował przepływ uwierzytelniania, wysyłając nowe żądanie HTTP do punktu końcowego Authentication Verify Endpoint skonfigurowanego na serwerze TsgcWSAPIServer_WebAuthn. Domyślnie punkt końcowy to /sgcWebAuthn/Authentication/Verify, więc jeśli serwer nasłuchuje pod domeną https://www.test.com, klient powinien wysłać nowe żądanie pod adres https://www.test.com/sgcWebAuthn/Authentication/Verify.

 

Przeglądarka prosi użytkownika o użycie jego urządzenia uwierzytelniającego (np. odcisk palca, YubiKey). Urządzenie uwierzytelniające podpisuje wyzwanie kluczem prywatnym powiązanym z identyfikatorem poświadczenia. Zwrócone poświadczenie zawiera:

 

 

Poniżej znajduje się przykład JSON żądania klienta:

 

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

 

Serwer odczytuje żądanie od klienta, sprawdza, czy poświadczenie jest zapisane, i weryfikuje podpis. Jeśli podpis jest prawidłowy, wywoływane jest zdarzenie OnWebAuthnAuthenticationSuccessful.

 

 

 

Przepływ uwierzytelniania

Więcej informacji na temat procesu przepływu uwierzytelniania można znaleźć pod następującymi linkami: