Signature verification failed al verificar token de microsoft entra id

Benjamin Romero Doren 20 Puntos de reputación
2025-04-02T14:44:43.41+00:00

Buenas, estoy integrando el login y verificación de Microsoft entra id en una aplicación SPA. Toda la parte del login diría que esta bien, sin embargo, pruebe lo que pruebe al verificar el token me salta el mismo error: "Signature verification failed".
Por ejemplo:

{
    "Header": {
        "typ": "JWT",
        "nonce": "gTAB52p_W_yj8JEfvsenjBF9c9Mrft48iLVTLbS09J8",
        "alg": "RS256",
        "x5t": "CNv0OI3RwqlHFEVnaoMAshCH2XE",
        "kid": "CNv0OI3RwqlHFEVnaoMAshCH2XE"
    },
    "PublicKey": {
        "kty": "RSA",
        "use": "sig",
        "kid": "CNv0OI3RwqlHFEVnaoMAshCH2XE",
        "x5t": "CNv0OI3RwqlHFEVnaoMAshCH2XE",
        "n": "hz6fUSCSAuiyQz6L1nQj4za8kItevJzxhVbecMigTIl9pXZSHZa3gzMgtapnb1q96CG5qvR78dH6ZvTKL8MzN4VfGgZhvLEv5LJKeo0tGgBIS65wxIiJYj9ExEDqFkw9RdhW1nN8IN9eO76PbC-fdEPtDekA2BaITY2DARISKN4Ke0RLBEWNrKeEjjOzrygS2e3Q9NVzE51ZGGQAGHau7atHy8M_qA1nnd2dMUgUMnEYIMzDBTSKz17G6itJOdanGvG3wXvdpndKffnDppaPkyWbnybdMI4IP7q6WsCqnt3Gtg-baG6GDqZQQEBp9C9gLAFv4ORTRlpD3w0gCMh7xw",
        "e": "AQAB",
        "x5c": [
            "MIIC/TCCAeWgAwIBAgIICu+WfBLOqBAwDQYJKoZIhvcNAQELBQAwLTErMCkGA1UEAxMiYWNjb3VudHMuYWNjZXNzY29udHJvbC53aW5kb3dzLm5ldDAeFw0yNTAzMTYyMDE3MjNaFw0zMDAzMTYyMDE3MjNaMC0xKzApBgNVBAMTImFjY291bnRzLmFjY2Vzc2NvbnRyb2wud2luZG93cy5uZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCHPp9RIJIC6LJDPovWdCPjNryQi168nPGFVt5wyKBMiX2ldlIdlreDMyC1qmdvWr3oIbmq9Hvx0fpm9MovwzM3hV8aBmG8sS/kskp6jS0aAEhLrnDEiIliP0TEQOoWTD1F2FbWc3wg3147vo9sL590Q+0N6QDYFohNjYMBEhIo3gp7REsERY2sp4SOM7OvKBLZ7dD01XMTnVkYZAAYdq7tq0fLwz+oDWed3Z0xSBQycRggzMMFNIrPXsbqK0k51qca8bfBe92md0p9+cOmlo+TJZufJt0wjgg/urpawKqe3ca2D5toboYOplBAQGn0L2AsAW/g5FNGWkPfDSAIyHvHAgMBAAGjITAfMB0GA1UdDgQWBBSsQvFDUwCTJXK+ltZFLaHUGzIS6jANBgkqhkiG9w0BAQsFAAOCAQEAUsfNQA+O7eXGI4IL/FmafEmmFjoXC+Ym9UIzG/vXcXzQEK9S9nV35Q0Fn9PsL1w8Sud3itm/V6t9UtB9yaRvWREPOdEYsHEkZahoSFi2fgOLP+AsTtQq0ePeBbqAQvnfrTvFuv+j1we3uxxov77pt7U+pB+6Sq8+yww85qeTCWmV4av2WWXB+6pW9oUd/D9htlxKL5WzNsaVojP56eg3mwhBmOpqxkYnL7RAPGOYRjaeHic9ONrctC8HImjf21UC5wK8G/lcVQATcvPZm/AYJg10fNsxZ/8ApFLblf9Q8l0QcKZfjs/si3VKcWvilDrfO9Dg83Ou6tvsLnPU5lV3aA=="
        ],
        "cloud_instance_name": "microsoftonline.com"
    }
}

En este caso para el token que tiene ese header lo estoy verificando con esta clave publica en la que ambos "kid" coinciden.

Hay alguna configuración del propio Azure que puede que tenga mal configurada?

Es posible que en el momento de generar el token pase algo raro y se modifique al momento haciendo así que deje de ser valido?

La libreria usada en la verificacion es firebase/php-jwt ^6.11.
Cualquier comentario se agradece.

Control de acceso basado en rol de Azure
Control de acceso basado en rol de Azure
Un servicio de Azure que proporciona administración de acceso específico para los recursos de Azure, lo que permite conceder a los usuarios solo los derechos necesarios para realizar sus trabajos.
131 preguntas
0 comentarios No hay comentarios
{count} votos

Respuesta aceptada
  1. Gao Chen 10,665 Puntos de reputación Personal externo de Microsoft Moderador
    2025-04-02T21:10:21.18+00:00

    Hola Benjamin Romero Doren,

    Entiendo que estás enfrentando problemas con la verificación de tokens JWT en tu aplicación SPA utilizando Azure AD y la librería firebase/php-jwt. Aquí hay algunos pasos y consideraciones que podrían ayudarte a resolver el problema:

    Verifica la Configuración de Azure AD:

    • Validar la Configuración de la Aplicación: Asegúrate de que la configuración de tu aplicación en Azure AD esté correcta, especialmente los permisos y la configuración de los endpoints.
    • Certificados y Claves: Verifica que los certificados y claves utilizados para firmar los tokens estén correctamente configurados y que no haya problemas con la rotación de claves.

    Verifica el Token:

    • Formato del Token: Asegúrate de que el token JWT esté en el formato correcto y que no haya sido modificado.
    • Nonce: Verifica que el nonce utilizado en el token coincida con el nonce esperado.

    Uso de la Librería firebase/php-jwt:

    • Configuración de la Librería: Asegúrate de que la librería esté correctamente configurada para utilizar la clave pública proporcionada por Azure AD.
    • Algoritmo de Firma: Verifica que el algoritmo de firma (RS256) esté correctamente configurado en la librería.

    Ejemplo de Verificación de Token con firebase/php-jwt

    Aquí hay un ejemplo de cómo podrías verificar el token utilizando la librería firebase/php-jwt:

    use Firebase\JWT\JWT;
    use Firebase\JWT\JWK;
    
    $publicKey = "-----BEGIN PUBLIC KEY-----\nMIIC/TCCAeWgAwIBAgIICu+WfBLOqBAwDQYJKoZIhvcNAQELBQAwLTErMCkGA1UEAxMiYWNjb3VudHMuYWNjZXNzY29udHJvbC53aW5kb3dzLm5ldDAeFw0yNTAzMTYyMDE3MjNaFw0zMDAzMTYyMDE3MjNaMC0xKzApBgNVBAMTImFjY291bnRzLmFjY2Vzc2NvbnRyb2wud2luZG93cy5uZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCHPp9RIJIC6LJDPovWdCPjNryQi168nPGFVt5wyKBMiX2ldlIdlreDMyC1qmdvWr3oIbmq9Hvx0fpm9MovwzM3hV8aBmG8sS/kskp6jS0aAEhLrnDEiIliP0TEQOoWTD1F2FbWc3wg3147vo9sL590Q+0N6QDYFohNjYMBEhIo3gp7REsERY2sp4SOM7OvKBLZ7dD01XMTnVkYZAAYdq7tq0fLwz+oDWed3Z0xSBQycRggzMMFNIrPXsbqK0k51qca8bfBe92md0p9+cOmlo+TJZufJt0wjgg/urpawKqe3ca2D5toboYOplBAQGn0L2AsAW/g5FNGWkPfDSAIyHvHAgMBAAGjITAfMB0GA1UdDgQWBBSsQvFDUwCTJXK+ltZFLaHUGzIS6jANBgkqhkiG9w0BAQsFAAOCAQEAUsfNQA+O7eXGI4IL/FmafEmmFjoXC+Ym9UIzG/vXcXzQEK9S9nV35Q0Fn9PsL1w8Sud3itm/V6t9UtB9yaRvWREPOdEYsHEkZahoSFi2fgOLP+AsTtQq0ePeBbqAQvnfrTvFuv+j1we3uxxov77pt7U+pB+6Sq8+yww85qeTCWmV4av2WWXB+6pW9oUd/D9htlxKL5WzNsaVojP56eg3mwhBmOpqxkYnL7RAPGOYRjaeHic9ONrctC8HImjf21UC5wK8G/lcVQATcvPZm/AYJg10fNsxZ/8ApFLblf9Q8l0QcKZfjs/si3VKcWvilDrfO9Dg83Ou6tvsLnPU5lV3aA==\n-----END PUBLIC KEY-----";
    
    $token = "eyJhbGciOiJSUzI1NiIsImtpZCI6IkNudjBPSTNScXFsSEZFVmluYW9NQXNIR0gyWEUiLCJ0eXAiOiJKV1QifQ.eyJub25jZSI6ImdUQUI1MnBfV195ajhKRWZ2c2VuakJGOWM5TXJmdDQ4aUxWVExiUzA5SjgiLCJhdWQiOiJodHRwczovL215YXBwbGljYXRpb24uY29tIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvYWNjb3VudCIsImlhdCI6MTYyNTQxNjQwMCwiZXhwIjoxNjI1NDE2NzAwfQ.XYZ123";
    
    try {
        $decoded = JWT::decode($token, $publicKey, ['RS256']);
        print_r($decoded);
    } catch (Exception $e) {
        echo 'Error: ' . $e->getMessage();
    }
    

    Adicionalmente, yo te recomendaría asegurarte de que la clave pública utilizada para la verificación esté actualizada y que no haya problemas con la rotación de claves en Azure AD. Y también, verifica que el nonce utilizado en el token coincida con el nonce esperado en tu aplicación.

    Si el problema persiste, podrías utilizar herramientas de depuración para inspeccionar el token y la clave pública y asegurarte de que no haya discrepancias. Espero que la información brindada fuera útil, si necesitas más asistencia, estoy a tu disposición.

    Atentamente,

    Gao


    Si esta respuesta resolvió tu consulta, por favor haz clic en 'Aceptar respuesta'. Esto nos ayuda a mejorar continuamente la calidad y relevancia de nuestras soluciones.

    1 persona ha encontrado útil esta respuesta.
    0 comentarios No hay comentarios

0 respuestas adicionales

Ordenar por: Muy útil

Su respuesta

Las respuestas se pueden marcar como respuestas aceptadas por el autor de la pregunta, lo que ayuda a los usuarios a conocer la respuesta que resolvió el problema del autor.