WebAuthn | Registro

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:

 

 

 

 

Flujo de registro

Obtenga más información sobre el proceso de flujo de registro en los siguientes enlaces: