Ma candidature consiste en:
L'interface utilisateur parle avec le serveur principal via l'API RESTful à l'aide du client keycloak avec le flux d'octroi de code d'autorisation. Cela fonctionne bien.
Maintenant, j'ai besoin de la possibilité supplémentaire d'accéder aux ressources du backend en utilisant un compte système/service (avec généralement plus d'autorisations que l'utilisateur). Comment mettriez-vous en œuvre cette exigence? Je pensais que le flux d'informations d'identification du client serait utile ici.
Est-il possible d'utiliser le flux d'informations d'identification du client OAuth2 avec le client keycloak pour Spring Boot? J'ai trouvé des exemples qui utilisaient les fonctionnalités du client Spring Security OAuth2 pour obtenir un flux d'informations d'identification du client, mais cela semble étrange car j'utilise déjà le client keycloak pour la chose OAuth.
Merci pour vos réponses qui m'ont beaucoup aidé. Dans ma webapp UI, je suis maintenant en mesure de communiquer avec le backend en utilisant le jeton OAuth2 de l'utilisateur authentifié ou en utilisant le jeton du flux d'informations d'identification client de mon compte de service UI. Chaque chemin a son propre RestTemplate
, le premier se fait via l'intégration keycloak et le second est fait par Spring Security OAuth2 comme expliqué ici .
Nous avions une exigence similaire, obtenir le courrier électronique de l'utilisateur par utilisateur uuid.
Créez un utilisateur de service, assurez-vous que l'utilisateur a le rôle "realm-management" -> "view-users" (peut être également des utilisateurs de requêtes)
Le processus est simple: connectez-vous à keycloak avec l'utilisateur du service (conservez le mot de passe et/ou le nom d'utilisateur encodés dans le fichier de propriétés), faites une demande à keycloak avec accessToken dans l'en-tête d'autorisation pour
GET http: // {yourdomainadress}/auth/admin/realms/{yourrealmname}/users/{userId}
Un moyen de se connecter à keycloak en utilisant REST:
POST http: // {yourdomainadress}/auth/realms/{yourrealmname}/protocol/openid-connect/token
En-têtes:
Type de contenu: application/x-www-form-urlencoded
Corps x-www-form-urlencoded:
client_id: votre-client
nom d'utilisateur: utilisateur que vous utilisez
mot de passe: mot de passe pour l'utilisateur
grant_type: mot de passe
client_secret: 11112222-3333-4444-5555-666666666666 (le secret client est requis si le client "Access Type" = "confidentiel")
En bref: assurez-vous que votre utilisateur de service a le bon rôle assigné pour faire des opérations, se connecter, faire une requête keycloak (vérifier les documents pour obtenir l'url et les paramètres de la bonne requête, toujours difficile)