En un anterior a2f artículo hablamos de Swivel como herramienta externa para integrar nuestras aplicaciones a Scriptcase, sin embargo, es probable que dicha función la pueda tener una aplicación menos robusta como por ejemplo un desarrollo propio em NodeJS.
En este ejemplo, se desarrolló una aplicación en NodeJS un sistema de a2f en donde no solo pueden hacer doble autenticación por medio de un OTC (On Time Code) (Soft Token) sino también con un dispositivo (Hard Token), en este caso particular los de la familia FIDO de FEITIAN (https://www.ftsafe.com/products/FIDO). En el caso del OTC, este podría ser generado por ejemplo con Google Aunthenticator.
NodeJS: Este documento se centra en cómo desde Scriptcase se usa esos servicios. Esta implementación aunque fué propia se tuvo especial cuidado en las interfaces, por tal razón se documentaron claramente para cada una de estas opciones, PHP, .Net y Angular.
NodeJS En la documentación de PHP se nos daba la siguiente información:
php_sdk
v1.2.0
auth2factor PHP Integration SDK
Requisitos
- sudo apt-get install php5-curl
- sudo apt-get install composer
Utiliza Firebase JWT para firmado HMAC. Si no usas Composer, copiar las librerías de Firebase JWT a tu solución.
API
Configurar hostname, API key y secret
$HOST = “https://localhost”;
$API_KEY = “…”;
$API_SECRET = “…”;
$a2f_client = new auth2factor($HOST, $API_KEY, $API_SECRET);
Autenticación
delegate
Retorna un token temporal. Utilizado para solicitar verificación OTC/U2F.
Returns a temporary login token. Used to request an OTC/U2F verification.
$tokens = $a2f_client->delegate(“user@me.com”);
$req_token = $tokens[“x-app-sign-request”];
$u2f_req = $tokens[“x-u2f-sign-request”];
nodejs
validate_otc
Valida OTC. Retorna un bearer token, de otro modo false.
Verifies OTC. Returns a bearer token, otherwise false.
$sid = $a2f_client->validate_otc(“…temporary token”, “001122”);
validate_u2f
Valida U2F. Retorna un bearer token, de otro modo false. Debe ser llamado una vez el cliente firme exitosamente con u2f.sign.
Verifies U2F. Returns a bearer token, otherwise false. Must be called once succesfully signed with u2f.sign.
$client_data = “eyJ0eXAiO…”;
$signature_data = “AQAAADUw…”;
$sid = $a2f_client->validate_u2f(“…temporary token”, $client_data, $signature_data);
Registro de llaves
request_challenge
Solicita un U2F challenge para iniciar el registro de una llave.
Requests an U2F challenge to initiate key registration.
$challenge = $a2f_client->request_challenge(“a valid bearer token”);
register_key
Registra una llave U2F. Debe ser llamado una vez u2f.register retorne exitosamente.
Registers an U2F security key. Must be called once u2f.register returns succesfully.
$client_data = “eyJ0eXAiO…”;
$registration_data = “AQAAADUw…”;
$a2f_client->register_key(“a valid bearer token”, $client_data, $registration_data);
Implementación U2F
FIDO U2F – Enrolamiento
Una vez autenticado, el usuario ingresa a Configuración de Cuenta de la solución y le ofrece al usuario enrolar llave.
cookbook/register.php
- Obtiene un U2F challenge: API request_challenge
- Llama a libreria cliente u2f.register con el challenge y solicita firmar
- Se procede a ingresar la llave
- Se almacena la confirmación exitosa en register_key.php: API register_key
FIDO U2F – Autenticación
Si el usuario tiene llaves registradas en el dominio donde se autentico en el 1er paso.
cookbook/sign.php
- Obtiene un conjunto de sign requests
- Llama a libreria cliente u2f.sign con los sign requests y solicita firmar
- Se procede a ingresar la llave
- Se valida en sign_key.php y obtiene un bearer token: API validate_u2f
Libreria Javascript para U2F
Incluir libreria minificada
<head>
<script src=”js/a2f.js”></script>
</head>
Contiene:
- Axios para AJAX / REST axios.min.js
- Axios config axios-config.js
- U2F u2f-api.js
- U2F utils u2f-utils.js
Con base en lo anterior, se analizó y se definió que a nivel de Macro Algoritmo el programa debería:
- Definir parámetros de conexión.
- Con el usuario logueado en la 1a autenticación ( correo electrónico ), se conecta al servidor para solicitar un Token.
- Con la recepción del Token, se solicita el OTC al usuario.
- Se envía el OTC.
- Se recibe la respuesta si es autorizado o no la segunda autenticación.
- Si es exitoso redireccione la aplicación al Menú.
Espero les haya servido estos 3 artículos de este interesante tema de a2f, y sea cual fuese el método a utilizar no olviden en siempre revisar la documentación, hacer pruebas y por último implementarlo en Scriptcase.
También podría gustarte…