J'essaie d'envelopper ma tête autour du concept de bearer-only
clients 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-only
client.
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?
ServiceA
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.bearer-only
vraiment en place juste pour supporter ce cas d'utilisation qui n'est pas encore prêt?Signification du type d'accès uniquement au support
Donc, si vous sélectionnez votre client comme
bearer-only
dans 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-only
application 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?
Donc, si vous comprenez la déclaration ci-dessus, si vous avez deux microservices qui se parlent dans le cas, l'appelant sera
confidential
et l' appelé serabearer-only
Et Keycloak a également mentionné
Donc, si vous souhaitez utiliser n'importe quel adaptateur, vous pouvez utiliser en
bearer-only
fonction du besoinla source
bearer-only
contraire, faites votre clientconfidential
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.
la source