web-token implementa JWS, JWE, JWK y los conjuntos de JWK como componentes separados; web-token/jwt-library los agrupa, y un bundle de Symfony los integra como servicios. Es la opción de PHP cuando necesitas JWE, gestión de conjuntos de JWK o la lista completa de algoritmos: la 4.2.3 firmó y verificó HS, RS, PS y ES de 256/384/512 y EdDSA, incluidos PS384/512 y ES512, que no tiene firebase/php-jwt. No hay ninguna clase de algoritmo para ES256K ni para el Ed25519 totalmente especificado.
Los algoritmos se permiten de forma explícita: el AlgorithmManager que se pasa a JWSVerifier es la lista de permitidos, y un token con cualquier otro algoritmo falla con The algorithm "RS256" is not supported. none existe como clase de algoritmo, pero solo se acepta si lo incluyes en el gestor. Un token HS256 falsificado con el texto PEM de la clave EC falló incluso con HS256 permitido, porque una JWK EC no puede usarse como clave HMAC. ES256 con una clave P-384 produjo una firma que el propio verificador de la biblioteca rechazó.
La verificación y la comprobación de los claims son pasos separados: JWSVerifier::verifyWithKey() devolvió true para un token que había caducado una hora antes. Ejecuta después un ClaimCheckerManager, enumera los claims obligatorios —de lo contrario, exp no es obligatorio— y pasa una tolerancia a ExpirationTimeChecker, que desde la versión 4 también necesita un reloj PSR-20; el ejemplo muestra la secuencia completa.
Las firmas ES256 son 64 bytes de r‖s en bruto, y una firma DER hace que verifyWithKey() devuelva false; el decodificador de JWT muestra cuál de las dos lleva un token. Las claves son siempre objetos JWK; JWKFactory los construye a partir de PEM, de certificados o de parámetros de clave, y el constructor de JWKS genera conjuntos de claves en el mismo formato.