L'autenticazione WebAuthn consente agli utenti di accedere utilizzando credenziali a chiave pubblica precedentemente registrate. Implica la validazione di una sfida firmata utilizzando la chiave pubblica memorizzata dell'utente dalla registrazione.
Opzioni di autenticazione
L'autenticazione richiede che il client avvii il flusso di autenticazione tramite una nuova richiesta HTTP all'Authentication Options Endpoint configurato nel server TsgcWSAPIServer_WebAuthn. Per impostazione predefinita, l'endpoint è /sgcWebAuthn/Authentication/Options, quindi se il server è in ascolto sul dominio https://www.test.com, il client deve effettuare una nuova richiesta all'URL https://www.test.com/sgcWebAuthn/Authentication/Options.
Il client invia l'assertion (risposta di autenticazione) al server tramite POST
{"username":"test","user_verification":"preferred"}
Il server genera 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": {}
}
Verifica dell'autenticazione
L'autenticazione richiede che il client avvii il flusso di autenticazione utilizzando una nuova richiesta HTTP all'Authentication Verify Endpoint configurato nel server TsgcWSAPIServer_WebAuthn. Per impostazione predefinita, l'endpoint è /sgcWebAuthn/Authentication/Verify, quindi se il suo server è in ascolto sul dominio https://www.test.com, il client dovrebbe effettuare una nuova richiesta all'url https://www.test.com/sgcWebAuthn/Authentication/Verify.
Il browser chiede all'utente di utilizzare il proprio autenticatore (ad es. impronta digitale, YubiKey). L'autenticatore firma la challenge con la chiave privata collegata all'ID credenziale. La credenziale restituita include:
Trovi di seguito un esempio json della richiesta del client:
{
"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"
}
Il server legge la richiesta dal client, verifica che la credenziale sia archiviata e controlla la firma. Se la firma è valida, viene chiamato l'evento OnWebAuthnAuthenticationSuccessful.
Ulteriori informazioni sul processo del flusso di autenticazione sono disponibili nei seguenti link: