WebAuthn | Autenticação

A Autenticação WebAuthn permite que os usuários façam login utilizando credenciais de chave pública previamente registradas. Ela envolve validar um desafio (challenge) assinado utilizando a chave pública armazenada do usuário no registro.

 

 

Authentication Options

 

A autenticação requer que o cliente inicie o fluxo de autenticação utilizando uma nova HTTP Request ao Authentication Options Endpoint configurado no servidor TsgcWSAPIServer_WebAuthn. Por padrão, o endpoint é /sgcWebAuthn/Authentication/Options, então, se o seu servidor estiver escutando no domínio https://www.test.com, o cliente deve fazer uma nova requisição à url https://www.test.com/sgcWebAuthn/Authentication/Options.

 

O cliente envia a assertion (resposta de autenticação) ao Servidor via POST

 

{"username":"test","user_verification":"preferred"}

 

O servidor gera PublicKeyCredentialRequestOptions

 

{
    "challenge": "9d0d61edf30b45f8b88aef7087f9117716e2b7d8b0ee4460b06142f39dd0ec9f",
    "timeout": 60000,
    "rpId": "localhost",
    "allowCredentials": [
        {
            "id": "yeA4BVRlrAfLG-KzqsL_rlI4ffhuKHK8uoEkVoab065UkS82Zqlh9VFQHIYwOuOo",
            "type": "public-key",
            "transports": [
                "nfc",
                "usb"
            ]
        }
    ],
    "userVerification": "preferred",
    "hints": [],
    "attestation": "none",
    "attestationFormats": [],
    "extensions": {}
}

 

 

Authentication Verify

 

A autenticação requer que o cliente inicie o fluxo de autenticação utilizando uma nova HTTP Request ao Authentication Verify Endpoint configurado no servidor TsgcWSAPIServer_WebAuthn. Por padrão, o endpoint é /sgcWebAuthn/Authentication/Verify, então, se o seu servidor estiver escutando no domínio https://www.test.com, o cliente deve fazer uma nova requisição à url https://www.test.com/sgcWebAuthn/Authentication/Verify.

 

O navegador solicita ao usuário que utilize seu autenticador (por exemplo, impressão digital, YubiKey). O autenticador assina o desafio com a chave privada vinculada ao credential ID. A credencial retornada inclui:

 

 

Encontre abaixo um exemplo json da requisição do cliente:

 

{
    "id": "yeA4BVRlrAfLG-KzqsL_rlI4ffhuKHK8uoEkVoab065UkS82Zqlh9VFQHIYwOuOo",
    "rawId": "yeA4BVRlrAfLG-KzqsL_rlI4ffhuKHK8uoEkVoab065UkS82Zqlh9VFQHIYwOuOo",
    "response": {
        "authenticatorData": "SZYN5YgOjGh0NBcPZHZgW4_krrmihjLHmVzzuoMdl2MFAAAABw",
        "clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uZ.....",
        "signature": "MEQCIAJRqvvys8....",
        "userHandle": "36b9d6a84204487382fee62e7e67a80d"
    },
    "type": "public-key",
    "clientExtensionResults": {},
    "authenticatorAttachment": "cross-platform"
}

 

O servidor lê a requisição do cliente, valida que a credencial está armazenada e verifica a assinatura. Se a assinatura for válida, o evento OnWebAuthnAuthenticationSuccessful é chamado.

 

 

 

Authentication Flow

Obtenha mais informações sobre o processo de Authentication Flow utilizando os links a seguir: