5 votes

Quarkus vérifie les JWT provenant de sources multiples

Existe-t-il un moyen d'autoriser les JWT provenant de plusieurs sources ?

Je dispose d'une API REST à laquelle je n'autorise l'accès qu'au moyen d'une authentification par jeton porteur, et je n'ai vraiment besoin que de vérifier ces jetons, donc je n'ai pas vraiment besoin de tous les ajouts qu'apporte l'OIDC.

Disons que j'ai configuré Keycloak comme fournisseur d'identité. Je configurerais quarkous-oidc en conséquence. Mais maintenant, je veux aussi autoriser les JWTs que je crée dans un autre service, pour la communication de service à service. Ce n'est pas un fournisseur d'identité, mais je préfère utiliser smallrye-jwt pour créer des jetons "internes".

Il semble donc que je préfère utiliser quarkus-smallrye-jwt, mais je ne peux pas le configurer pour plusieurs locataires.

Je pense que consolider les clés dans un JWKS et le fournir à quarkus-smallrye-jwt pourrait éventuellement fonctionner. Mais il existe peut-être une solution plus élégante que je n'ai pas vue.

3voto

yntelectual Points 1558

Avec microprofile-jwt(smallrye-jwt) vous avez la possibilité d'utiliser JWKS(Json Web Key Set) comme votre mp.jwt.verify.publickey.location propriété. Cela vous permet de faire confiance aux jetons émis par plusieurs émetteurs. Cependant, vous ne pourrez pas, par exemple, valider plusieurs valeurs dans la propriété issuer du jeton jwt car il ne supporte qu'une seule valeur, ou définissez une configuration différente par émetteur.

Vous pouvez créer le JWKS manuellement, en combinant les informations de clé de vos fournisseurs d'authentification et en l'intégrant/montant dans votre application, ou vous pouvez implémenter un point de terminaison qui le produit dynamiquement (par exemple, il appellerait périodiquement les deux urls JWKS de Keycloaks et combinerait les résultats en produisant de nouveaux JWKS).

Si vous avez besoin de plus de contrôle sur la validation, vous devrez créer votre propre implémentation et l'intégrer à MP JWT/Quarkus. Une option pourrait être de fournir un JWTCallerPrincipalFactory à smallrye-jwt - voir Documents sur les usines personnalisées . Vous pouvez y lire n'importe quelle configuration personnalisée (par ex. my.app.jwt.issuers=trustedIssuer1,trustedIssuer2 et gérer la validation vous-même, en réutilisant peut-être des classes déjà fournies par smallrye ( JWTAuthContextInfo , JWTParser ...)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X