Cómo Implementar A2F usando un Desarrollo Propio en NodeJS en una aplicación Scriptcase | Scriptcase Blog - Development, Web Design, Sales and Digital Marketing

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.

En este ejemplo, se desarrolló una aplicación en NodeJS un sistema de doble autenticación 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.

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.

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”];

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:

  1. Definir parámetros de conexión.
  2. Con el usuario logueado en la 1a autenticación ( correo electrónico ), se conecta al servidor para solicitar un Token.
  3. Con la recepción del Token, se solicita el OTC al usuario.
  4. Se envía el OTC.
  5. Se recibe la respuesta si es autorizado o no la segunda autenticación.
  6. Si es exitoso redireccione la aplicación al Menú.

Espero les haya servido estos 3 artículos de este interesante tema de Doble Autenticación, 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.

Tambien te puede interesar

Alternativa a visual basic

Scriptcase es la mejor alternativa a Microsoft Visual Basic. Si vienes programando con VB ó VB ...

Alternativa a phprunner, phpmaker

En el mundo de desarrollo PHP, los desarrolladores tienen ventajas sobre otros desarrollado...

Alternativa ASP.Net

ASP.NET es un entorno para aplicaciones web desarrollado y comercializado por ...

Comentar este post

Reciba los nuevos post, novedades y ofertas!

Ingresa tu e-mail para recibir orientaciones y asistencia técnica durante el período de evaluación, además de comunicaciones como novedades y ofertas especiales de Scriptcase. Tu información será utilizada de acuerdo con nuestra política de privacidad. Puedes optar por no participar en cualquier momento