clients au porteur de keycloak: pourquoi existent-ils?


10

J'essaie d'envelopper ma tête autour du concept de bearer-onlyclients dans Keycloak.

Je comprends le concept de public vs confidentiel et le concept de comptes de service et tout grant_type=client_credentialsça. Mais avec bearer-only, je suis coincé.

La recherche sur Google ne révèle que des fragments de discussions disant:

Vous ne pouvez pas obtenir un jeton de keycloak avec un bearer-onlyclient.

Les documents ne sont pas clairs non plus. Tout ce qu'ils disent, c'est:

Le type d'accès uniquement au porteur signifie que l'application n'autorise que les demandes de jeton au porteur.

Ok, si mon application n'autorise que les demandes de jeton au porteur, comment puis-je obtenir ce jeton si je ne peux pas l'obtenir auprès de Keycloak en utilisant l'identifiant client / secret client?

Et si vous ne pouvez pas obtenir de jeton, que pouvez-vous du tout? Pourquoi ces clients existent-ils? Quelqu'un peut-il donner un exemple d'utilisation de ce type de client?

Réponses:


5

À ma connaissance, il est utilisé lorsque vous avez un service interne. Disons que vous avez ServiceAet ServiceB. Un utilisateur appelle ServiceAqui appelle en main ServiceB. ServiceBn'est jamais appelé directement par l'utilisateur, uniquement par d'autres services. ServiceAobtiendra un jeton en utilisant les informations d'identification de l'utilisateur. Et puis utilisera ce jeton pour appeler ServiceB.ServiceBn'initiera jamais de connexion. Il utilisera simplement le jeton pour vérifier les autorisations.

Dans ce cas, ServiceA sera confidentialet ServiceB seront des bearer-onlyclients.


1
Cela signifie donc que si mon client est uniquement au porteur, la seule option à ma disposition est de faire des demandes de vérification à Keycloak pour s'assurer que le jeton ServiceAest valide. Droite? Mais si c'est le cas, pourquoi appeler Keycloak? Si mon client a une clé publique Keycloak, il peut la vérifier en utilisant cette clé sans jamais appeler Keycloak.
kurtgn

En raison de la portée des jetons. Le service A doit avoir une autre portée que le service B, vous avez donc besoin de Keycload pour l'échange de jetons
Julian Egner

@JulianEgner Cela a du sens, sauf que Token Exchange est actuellement dans Tech Preview, n'est pas entièrement pris en charge et doit être explicitement activé avec une variable Env. Est-ce bearer-onlyvraiment en place juste pour supporter ce cas d'utilisation qui n'est pas encore prêt?
irbull

@irbull où avez-vous obtenu les informations selon lesquelles l'échange de jetons serait en avant-première technique?
Julian Egner

@JulianEgner Il était répertorié tout en bas de leurs documents. Répertorié dans keycloak.org/docs/latest/securing_apps/…, il est écrit "L'échange de jetons est un aperçu technologique et n'est pas entièrement pris en charge. Cette fonctionnalité est désactivée par défaut."
irbull

5

Signification du type d'accès uniquement au support

Le type d'accès uniquement au porteur signifie que l'application n'autorise que les demandes de jeton au porteur. Si cette option est activée, cette application ne peut pas participer aux connexions du navigateur.

Donc, si vous sélectionnez votre client comme bearer-onlydans ce cas, l'adaptateur keycloak n'essaiera pas d'authentifier les utilisateurs, mais vérifiera seulement les jetons du porteur. C'est pourquoi la documentation de keycloak a également mentionné que l' bearer-onlyapplication ne permettra pas la connexion à partir du navigateur.

Et si vous ne pouvez pas obtenir de jeton, que pouvez-vous du tout? Pourquoi ces clients existent-ils?

Votre client ne peut pas être défini comme porteur uniquement sur le serveur Keycloak. Vous pouvez toujours utiliser le support uniquement sur la configuration de l'adaptateur. Keycloak n'autorise pas les clients "porteurs uniquement" (lors de la configuration de votre client sur le serveur) à obtenir des jetons du serveur. Essayez de changer votre client en "confidentiel" sur le serveur et définissez le support uniquement sur la configuration de votre adaptateur (keycloak.json).

Donc, si vous comprenez la déclaration ci-dessus, si vous avez deux microservices qui se parlent dans le cas, l'appelant sera confidentialet l' appelé serabearer-only

Et Keycloak a également mentionné

Le client porteur uniquement est un service Web qui n'initie jamais de connexion. Il est généralement utilisé pour sécuriser le back-end.

Donc, si vous souhaitez utiliser n'importe quel adaptateur, vous pouvez utiliser en bearer-onlyfonction du besoin


1
merci Subodh pour votre explication! Cela signifie donc que si mon client est uniquement au porteur, la seule option à ma disposition est de faire des demandes de vérification à Keycloak pour s'assurer que le jeton est valide. Droite? Mais si c'est le cas, pourquoi appeler Keycloak? Si mon client a une clé publique Keycloak, il peut la vérifier en utilisant cette clé sans jamais appeler Keycloak.
kurtgn

@kurtgn Si vous utilisez n'importe quel adaptateur, alors seulement je vous suggérerai d'utiliser le bearer-onlycontraire, faites votre clientconfidential
Subodh Joshi

Non, je n'utilise pas d'adaptateurs, je code en Python, il n'y a pas d'adaptateurs spécifiques à Python pour Keycloak, donc je dois utiliser des
bibliothèques

Quelle bibliothèque utilisez-vous avec l'intégration Keycloak + Python?
Subodh Joshi


0

Réponse courte: vous ne pouvez pas obtenir de jeton d'accès à l'aide d'un client au porteur uniquement, mais vous pouvez obtenir un jeton d'accès qu'un client au porteur peut accepter à l'aide d'un autre client.

Plus de détails, les clients au porteur représentent utilement les applications dorsales, comme le service Web, appelées par l'application frontale et sécurisées par le serveur d'autorisation (= keycloak)

Les applications de service backend / Web ne sont pas appelées directement par l'utilisateur, elles ne peuvent donc pas être lues dans le flux interactif utilisateur Oauth2.0. La définition de "porteur uniquement" documente ce fait sur le serveur keycloak, permettant à l'administrateur de configurer le client sans valeurs autrement obligatoires (exemple, rediriger uri ...) et autorisant les messages d'erreur utiles si quelqu'un essaie d'obtenir un jeton pour un tel client

Cependant, cela ne signifie pas que vous ne pouvez pas configurer de rôles spécifiques pour ce client: il doit donc apparaître dans le domaine keycloak.

De plus, le client uniquement porteur doit vérifier le jeton d'accès reçu, en particulier, si cette fonction d'adaptateur (recommenden) "Verify-token-audience" est activée, le client uniquement porteur doit vérifier que le jeton d'accès a été émis pour cela: le client au porteur uniquement doit figurer dans l'attribut audience du jeton d'accès: voir https://www.keycloak.org/docs/latest/server_admin/index.html#_audience

pour la gestion d'audience par keycloak, les clients au porteur uniquement doivent être enregistrés dans le domaine keycloak.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.