web-dev-qa-db-fra.com

Comment obtenir des utilisateurs Keycloak via REST sans compte administrateur

Existe-t-il un moyen d'obtenir une liste d'utilisateurs sur un domaine Keycloak via REST SANS en utilisant un compte administrateur? Peut-être que certains sorte de rôle assignable à partir de la console d'administration? Vous cherchez des idées.

En ce moment, j'utilise les informations d'identification d'administrateur pour récupérer un jeton d'accès, puis j'utilise ce jeton pour extraire les utilisateurs du realm/users point final.

Obtenir le jeton (à partir de l'application node.js via request):

uri: `${keycloakUri}/realms/master/protocol/openid-connect/token`,
form: {
  grant_type: 'password',
  client_id: 'admin-cli',
  username: adminUsername,
  password: adminPassword,
}

Utilisation du jeton:

uri: `${keycloakUri}/admin/realms/${keycloakRealm}/users`,
headers: {
  'authorization': `bearer ${passwordGrantToken}`,
}

Je veux pouvoir utiliser des informations utilisateur génériques (noms d'utilisateur, e-mails, noms complets) à partir d'une application client.

12
Borja Canseco

Vous devez attribuer le view-users rôle du realm-management client, pour l'utilisateur souhaité. Ce serait la configuration pour l'utilisateur:

enter image description here

Ensuite, vous pouvez récupérer tous les utilisateurs du ${keycloakUri}/admin/realms/${keycloakRealm}/users point final. Ce sont les informations récupérées de l'enpoint, accessibles via Postman:

enter image description here

De plus, sans rapport avec la question posée, je vous encourage fortement à ne pas utiliser grant_type=password sauf si vous en avez absolument besoin. Depuis le blog keycloak :

RESULT=`curl --data "grant_type=password&client_id=curl&username=user&password=password" http://localhost:8180/auth/realms/master/protocol/openid-connect/token`

C'est un peu cryptique et heureusement, ce n'est pas comme ça que vous devriez vraiment obtenir des jetons. Les jetons doivent être obtenus par les applications Web en redirigeant vers la page de connexion Keycloak. Nous le faisons uniquement pour que nous puissions tester le service car nous n'avons pas encore d'application pouvant invoquer le service. Fondamentalement, ce que nous faisons ici est d'invoquer le point de terminaison du jeton Keycloaks OpenID Connect avec le type d'autorisation défini sur mot de passe, qui est le flux des informations d'identification du propriétaire de la ressource qui permet d'échanger un nom d'utilisateur et un mot de passe pour un jeton.

Voir aussi Oauth2 spec .

16
Xtreme Biker