El registro WebAuthn involucra al cliente (navegador), al autenticador (dispositivo de seguridad) y a la parte de confianza (RP; servidor Delphi/CBuilder TsgcWSAPIServer_WebAuthn).
Opciones de registro
La creación de una nueva credencial de usuario generalmente requiere que el cliente inicie el flujo de registro mediante una nueva solicitud HTTP al Endpoint de Opciones de Registro configurado en el servidor TsgcWSAPIServer_WebAuthn. Por defecto, el endpoint es /sgcWebAuthn/Registration/Options, por lo que si su servidor está escuchando en el dominio https://www.test.com, el cliente debe realizar una nueva solicitud a la URL https://www.test.com/sgcWebAuthn/Registration/Options.
El cliente envía una nueva solicitud pasando como payload el siguiente JSON (usando «test» como nombre de usuario)
{"username":"test","algorithms":[]}
El servidor lee la solicitud y devuelve una respuesta con un nuevo desafío.
{
"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 respuesta devuelve los siguientes datos:
Verificación de registro
Ahora el cliente tiene la respuesta del servidor, lee la respuesta y el autenticador devuelve los datos criptográficos al navegador web del cliente. Ahora el cliente envía una nueva solicitud HTTP con los siguientes datos al punto de enlace de verificación de registro configurado en el servidor TsgcWSAPIServer_WebAuthn, que por defecto es /sgcWebAuthn/Registration/Verify
, por lo que si su servidor está escuchando en el dominio https://www.test.com, el cliente deberá realizar una nueva solicitud a la URL https://www.test.com/sgcWebAuthn/Registration/Verify.
El autenticador responde al JavaScript en el navegador con:
A continuación encontrará un ejemplo:
{
"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"
}
El servidor lee la solicitud JSON del cliente y decodifica, verifica y almacena la clave pública y el ID de credencial.
Decodificar attestationObject y clientDataJSON:
Almacenar credencial:
Obtenga más información sobre el proceso de flujo de registro en los siguientes enlaces: