No artigo anterior falamos sobre A2F com o Swivel como ferramenta externa para integrar nossas aplicações em Scriptcase, destaco que, é provável que dessa função se possa ter uma aplicação menos robusta como por exemplo em um desenvolvimento próprio. Agora vamos mostrar uma aplicação em NodeJS de um sistema de dupla autenticação.
Nesse exemplo, se desenvolve uma aplicação em NodeJS de um sistema de dupla autenticação onde só se pode fazer dupla autenticação por meio de um OTC (On Time Code) (Soft Token), mas também com um dispositivo (Hard Token), e nesse caso em particular os da família FIDO e FEITIAN (https://www.ftsafe.com/products/FIDO). E no caso de OTC, este poderia ser gerado por exemplo com o Google Aunthenticator.
NodeJS: Este documento se concentra em como o Scriptcase faz uso desses serviços. Esta implementação, embora tenha sido própria, foi tomado um cuidado especial nas interfaces, por isso elas foram claramente documentadas para cada uma dessas opções, PHP, .Net e Angular.
Na documentação do PHP nos era dado as seguintes informações:
php_sdk
v1.2.0
A2F : auth2factor PHP Integration SDK
Requisitos
- sudo apt-get install php5-curl
- sudo apt-get install composer
Utiliza Firebase JWT para assinado HMAC. Se não usas Composer, copiar as livrarias do Firebase JWT para tua solucão.
API
Configurar hostname, API key e secret
$HOST = “https://localhost”;
$API_KEY = “…”;
$API_SECRET = “…”;
$a2f_client = new auth2factor($HOST, $API_KEY, $API_SECRET);
Autenticação
delegate
Retorna un token temporal. Utilizado para solicitar verificação OTC/U2F.
$tokens = $a2f_client->delegate(“user@me.com”);
$req_token = $tokens[“x-app-sign-request”];
$u2f_req = $tokens[“x-u2f-sign-request”];
validate_otc
Valida o OTC. Retorna um token de portador, caso contrário falso.
$sid = $a2f_client->validate_otc(“…temporary token”, “001122”);
validate_u2f
Valida U2F. Retorna um token de portador, caso contrário falso. Deve ser chamado uma vez se o cliente assina com sucesso com u2f.sign.
$client_data = “eyJ0eXAiO…”;
$signature_data = “AQAAADUw…”;
$sid = $a2f_client->validate_u2f(“…temporary token”, $client_data, $signature_data);
Registro de chaves
request_challenge
Solicita uma U2F challenge para iniciar a chave de registro.
$challenge = $a2f_client->request_challenge(“validando o token portador”);
register_key
Registra uma chave U2F. Deve ser chamado uma vez u2f.register retorna com sucesso.
$client_data = “eyJ0eXAiO…”;
$registration_data = “AQAAADUw…”;
$a2f_client->register_key(“validando o token portador”, $client_data, $registration_data);
Implementação U2F
FIDO U2F – Inscrição
Uma vez autenticado, o usuário acessa a Configuração da Conta da solução e lhe é ofereceido a inscrição da chave.
cookbook/register.php
- Obtem um U2F challenge: API request_challenge
- Chama a livraria cliente u2f.register com o challenger e solicita assinar
- Nós prosseguimos para entrar na chave
- A confirmação bem-sucedida é armazenada em register_key.php: API register_key
FIDO U2F – Autenticação
Se o usuario tiver chaves registradas no domínio ( onde se autenticou no primeiro passo).
cookbook/sign.php
- Obtem um conjunto de sign requests
- Chama a livraria cliente u2f.sign com os sign requests e solicita firmar
- Se procede a ingresar a chave
- Se valida o sign_key.php e obten um token portador: API validate_u2f
Livraria Javascript para U2F
Incluir livraria minificada
<head>
<script src=”js/a2f.js”></script>
</head>
Contêm:
- Axios para AJAX / REST axios.min.js
- Axios config axios-config.js
- U2F u2f-api.js
- U2F utils u2f-utils.js
Com base no anterior, se analizou e se definio que a nivel de Macro Algoritmo o programa deveria:
- Definir parametros de conexão,
- Com o usuario loguado na 1a autenticação ( email ), se conecta ao servidor para solicitar um Token.
- Com a recepção do Token, se solicita o OTC ao usuário.
- Se envia o OTC.
- Se recebe a resposta e é autorizado ou não a segunda autenticação.
- Se é bem-sucedida, redireciona a aplicação ao Menu.
Espero que os 3 artigos deste tema tão interessante como a Dupla Autenticação lhe tenham sido úteis, e qualquer que seja o método a ser utilizado, não esqueça de sempre revisar a documentação, fazer testes e, finalmente, implementá-lo no Scriptcase.
Veja esse e muitos outros conteúdos do nosso blog aqui: SCRIPTCASE BLOG
Você pode gostar também…