L'enregistrement WebAuthn implique le client (navigateur), l'authentificateur (dispositif de sécurité) et la partie de confiance (RP ; serveur Delphi/CBuilder TsgcWSAPIServer_WebAuthn).
Options d'enregistrement
La création d'un nouveau credential utilisateur nécessite généralement que le client démarre le flux d'enregistrement en utilisant une nouvelle requête HTTP vers le Point de terminaison des options d'enregistrement configuré dans le serveur TsgcWSAPIServer_WebAuthn. Par défaut, le point de terminaison est /sgcWebAuthn/Registration/Options, donc si votre serveur écoute dans le domaine https://www.test.com, le client doit effectuer une nouvelle requête vers l'url https://www.test.com/sgcWebAuthn/Registration/Options.
Le client envoie une nouvelle requête en transmettant comme charge utile le JSON suivant (en utilisant « test » comme nom d'utilisateur)
{"username":"test","algorithms":[]}
Le serveur lit la requête et renvoie une réponse avec un nouveau défi.
{
"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
}
}
La réponse retourne les données suivantes :
Vérification d'inscription
Maintenant que le client a la réponse du serveur, il lit la réponse et l'authentificateur renvoie les données cryptographiques au navigateur web client. Le client envoie alors une nouvelle requête HTTP avec les données suivantes au point de terminaison de vérification d'enregistrement configuré dans le serveur TsgcWSAPIServer_WebAuthn, par défaut /sgcWebAuthn/Registration/Verify
, donc si votre serveur écoute dans le domaine https://www.test.com, le client doit effectuer une nouvelle requête vers l'url https://www.test.com/sgcWebAuthn/Registration/Verify.
L'authentificateur répond au JavaScript du navigateur avec :
Vous trouverez ci-dessous un exemple :
{
"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"
}
Le serveur lit la requête JSON du client et décode, vérifie et stocke la clé publique et l'identifiant de l'accréditation.
Décoder attestationObject et clientDataJSON :
Stocker les identifiants :
Obtenez plus d'informations sur le processus du flux d'enregistrement en utilisant les liens suivants :