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.