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:
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?
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.
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
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 :)
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
Utilisateurs> myuser> Mappages de rôles> Rôles client> realm-management
Attribuez à l'utilisateur l'un des deux rôles manage-users
ou view-users
.
Générez un nouveau jeton.
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.