L'authentification WebAuthn permet aux utilisateurs de se connecter en utilisant des identifiants à clé publique précédemment enregistrés. Elle implique la validation d'un défi signé en utilisant la clé publique stockée de l'utilisateur à partir de l'enregistrement.
Options d'authentification
L'authentification requiert que le client initie le flux d'authentification via une nouvelle requête HTTP vers le point de terminaison des options d'authentification configuré dans le serveur TsgcWSAPIServer_WebAuthn. Par défaut, le point de terminaison est /sgcWebAuthn/Authentication/Options ; ainsi, si votre serveur écoute sur le domaine https://www.test.com, le client doit effectuer une nouvelle requête vers l'URL https://www.test.com/sgcWebAuthn/Authentication/Options.
Le client envoie l'assertion (réponse d'authentification) au serveur via POST
{"username":"test","user_verification":"preferred"}
Le serveur génère les 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": {}
}
Vérification de l'authentification
L'authentification requiert que le client initie le flux d'authentification via une nouvelle requête HTTP vers le point de terminaison de vérification d'authentification configuré dans le serveur TsgcWSAPIServer_WebAuthn. Par défaut, le point de terminaison est /sgcWebAuthn/Authentication/Verify ; ainsi, si votre serveur écoute sur le domaine https://www.test.com, le client doit effectuer une nouvelle requête vers l'URL https://www.test.com/sgcWebAuthn/Authentication/Verify.
Le navigateur invite l'utilisateur à utiliser son authentificateur (par ex. empreinte digitale, YubiKey). L'authentificateur signe le défi avec la clé privée liée à l'identifiant de credential. Le credential retourné comprend :
Voici ci-dessous un exemple json de la requête 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"
}
Le serveur lit la requête du client, valide que l'identifiant est stocké et vérifie la signature. Si la signature est valide, l'événement OnWebAuthnAuthenticationSuccessful est appelé.
Obtenez plus d'informations sur le processus de flux d'authentification via les liens suivants :