web-dev-qa-db-fra.com

Validation de l'utilisateur KeyCloak et obtention du jeton

Tout d'abord, je suis très nouveau à Keycloak et excusez-moi si quelque chose que je demande peut être faux.

J'ai installé le serveur Keycloak et je peux accéder à l'interface utilisateur Web pour la même chose en utilisant:

http: // localhost: 8008/auth

Mon exigence est de valider un utilisateur de domaine en le passant à k Keycloak API et d'obtenir le jeton à partir de là en réponse, puis de passer ce jeton pour mes autres appels d'API Web.

Mais je n'ai pas réussi à trouver un guide simple sur la façon de le faire ...

MISE À JOUR:


UTILISATION DE L'UI à partir de KEYCLOAK:

Jusqu'ici maintenant:

  • Je peux créer un realm: par exemple: DemoRealm

  • Sous le Realm j'ai créé le client: par exemple: DemoClient

  • Sous le client, j'ai créé l'utilisateur: par exemple: DemoUser

UTILISATION DE POSTMAN:

Je peux également obtenir le jeton avec succès

http://localhost:8080/auth/realms/DemoRelam/protocol/openid-connect/token

POST:
{
"grant_type": "client_credentials",
"username": "",
"password": "",
"client_secret":"",
"client_id":"DemoClient"
}

En réponse, je reçois le jeton.

{
    "access_token": "eyJhbGciOiJSUzI1NiIsINVSHGhepnDu13SwRBL-v-y-04_6e6IJbMzreZwPI-epwdVPQe-ENhpvms2WdGM_DmgMLZ8YQFS4LDl9R7ZHT8AgXe-WCFV6OFkA7zvdeFwQ4kVVZE0HlNgHgoi4DrgMfwwz_ku1yJNJP3ztTY1nEqmA",
    "expires_in": 300,
    "refresh_expires_in": 1800,
    "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJRRnB5YlloMGVEektIdlhOb3JvaFUxdlRvWVdjdP3vbfvk7O0zvppK9N4-oaUqZSr0smHv5LkuLDQYdPuxA",
    "token_type": "bearer",
    "not-before-policy": 0,
    "session_state": "bb1c586a-e880-4b96-ac16-30e42c0f46dc"
}

De plus, je plongeais dans plus de détails et j'ai trouvé ce guide API:

http://www.keycloak.org/docs-api/3.0/rest-api/index.html#_users_resource

Dans ce guide, il est mentionné que je peux obtenir les utilisateurs du domaine en utilisant Get users Renvoie une liste d'utilisateurs, filtrée en fonction des paramètres de la requête

GET /admin/realms/{realm}/users

Mais lorsque j'utilise POSTMAN pour obtenir les utilisateurs que j'obtiens 403 code d'erreur. Je passe le même jeton que sur l'authentification que j'ai obtenu à l'étape précédente.

http://localhost:8080/auth/admin/realms/DemoRelam/users

Quelqu'un peut-il me guider?

7
Rohitesh

Vous avez 2 choix: vous pouvez agir au nom d'un utilisateur (comme Adnan Khan l'a souligné), ou créer un client dédié pour cela.

Au nom de l'utilisateur

1) créer un client confidentiel (je suppose que vous en avez déjà un)

2) créer un utilisateur et lui attribuer un ou des rôles appropriés: par ex. view-users du realm-management groupe

3) Obtenez le jeton (j'utilise curl et jq ):

KCHOST=https://yourkeycloak.com
REALM=realm
CLIENT_ID=confidential-client
CLIENT_SECRET=xxxxxxx-yyyyyy-zzzzzzzz
UNAME=user
PASSWORD=passwd

ACCESS_TOKEN=`curl \
  -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" \
  -d "username=$UNAME" -d "password=$PASSWORD" \
  -d "grant_type=password" \
  "$KCHOST/auth/realms/$REALM/protocol/openid-connect/token"  | jq -r '.access_token'`

4) Enfin, appelez l'administrateur REST point de terminaison des utilisateurs :

curl -X GET -H "Authorization: Bearer $ACCESS_TOKEN" $KCHOST/auth/admin/realms/$REALM/users | jq

Au nom du client (compte de service)

1) créez un client confidentiel et assurez-vous de basculer le paramètre Comptes de service activés sur On

2) passez au Service account roles tab et sélectionnez le rôle approprié pour ce client, par exemple realm-admin du realm-management groupe

3) Obtenez le jeton d'accès

KCHOST=https://yourkeycloak.com
REALM=realm
CLIENT_ID=protector-of-the-realm
CLIENT_SECRET=xxxxxxx-yyyyyyyy-zzzzzzzzz

ACCESS_TOKEN=`curl \
  -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" \
  -d "grant_type=client_credentials" \
  "$KCHOST/auth/realms/$REALM/protocol/openid-connect/token"  | jq -r '.access_token'`

4) appelez le point de terminaison API REST:

curl -X GET -H "Authorization: Bearer $ACCESS_TOKEN" $KCHOST/auth/admin/realms/$REALM/users | jq

P.S. Pour le débogage, je viens d'écrire un outil CLI appelé brauzie qui vous aiderait à récupérer et analyser vos jetons JWT (étendues, rôles, etc.). Il pourrait être utilisé pour des clients publics et confidentiels. Vous pouvez également utiliser Postman et https://jwt.io

HTH :)

3
maslick

Les utilisateurs de keycloak sont spécifiques au domaine et tous les utilisateurs ne sont pas autorisés à y accéder. Vous pourrez obtenir tous les utilisateurs via l'API d'administration après avoir attribué un rôle spécifique à l'utilisateur dans le tableau de bord d'administration. Faites simplement

  1. Dans le tableau de bord d'administration, accédez à

Utilisateurs> myuser> Mappages de rôles> Rôles client> realm-management

  1. Attribuez à l'utilisateur l'un des deux rôles manage-users ou view-users.

  2. Générez un nouveau jeton.

  3. Hit API avec un nouveau jeton

et vous aurez vos utilisateurs

Je pense que vous devriez mettre à jour votre en-tête de question pour quelque chose de plus pertinent.

0
Adnan Khan