es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Quarkus verifica la firma JWT desde el Equilibrador de Carga de Aplicaciones de AWS.

Estoy utilizando AWS Elastic Load Balancer para autenticar usuarios, lo que firma la reclamación del usuario para que las aplicaciones puedan verificar la firma y comprobar que las reclamaciones fueron enviadas por el equilibrador de carga, como se describe en:

https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-authenticate-users.html#user-claims-encoding

Para verificar la firma, es necesario solicitar la clave pública ubicada en:

https://public-keys.auth.elb.region.amazonaws.com/key-id

Ten en cuenta que el key-id es dinámico y se envía junto con el JWT en el encabezado, en el campo “kid”.

{
“alg”: “algoritmo”,
“kid”: “12345678-1234-1234-1234-123456789012”,
“signer”: “arn:aws:elasticloadbalancing:region-code:account-id:loadbalancer/app/load-balancer-name/load-balancer-id”,
“iss”: “url”,
“client”: “client-id”,
“exp”: “expiración”
}

A nivel de aplicación, quiero utilizar Quarkus con smallrye-jwt para verificar el JWT.
Leyendo la guía en:

https://quarkus.io/guides/security-jwt#configuration-reference

Existe la configuración “mp.jwt.verify.publickey.location” que acepta una URL, pero ¿cómo configuro esto cuando la URL de clave pública de AWS requiere extraer un “key-id” del encabezado del JWT?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para configurar Quarkus con smallrye-jwt para verificar el JWT con una URL de clave pública que requiere un key-id extraído del encabezado JWT, deberá utilizar una implementación personalizada de un proveedor JWKS (JSON Web Key Set). Este proveedor extraerá el key-id del encabezado JWT, obtendrá la clave pública de la URL de clave pública de AWS utilizando el key-id y luego devolverá la clave pública a smallrye-jwt para su verificación.

    Aquí están los pasos generales para implementar esta solución:

    1. Implemente un proveedor JWKS personalizado que extraiga el key-id del encabezado JWT, recupere la clave pública de la URL de clave pública de AWS utilizando el key-id y devuelva la clave pública a smallrye-jwt para su verificación. Puede utilizar el módulo de integración JWKS de SmallRye JWT como punto de partida:

      https://github.com/smallrye/smallrye-jwt/blob/main/jwt-jwks-integration/README.md

    2. Configure Quarkus para utilizar su proveedor JWKS personalizado estableciendo la propiedad mp.jwt.verify.publickey.location en la URL de su punto de conexión del proveedor JWKS personalizado.

      Por ejemplo:

      mp.jwt.verify.publickey.location=http://localhost:8080/auth/jwks
      

    3. Implemente su punto de conexión de proveedor JWKS personalizado en una ubicación de acceso público.

      Esto se puede hacer utilizando cualquier framework o servidor web de su elección. El punto de conexión debe aceptar un JWT en los encabezados de la solicitud, extraer el key-id del campo kid, recuperar la clave pública de la URL de clave pública de AWS utilizando el key-id y devolver la clave pública en formato JWKS (según lo especificado por el estándar RFC 7517).

    4. Pruebe su solución enviando un JWT a su aplicación y verificando que el JWT se valide correctamente utilizando la clave pública obtenida de la URL de clave pública de AWS.

Comments are closed.