web-dev-qa-db-fra.com

KeyCloak: Valide le jeton d'accès et obtient l'ID KeyCloak

Je dois être capable de faire ce qui suit (avec des frameworks plaine cURL & JSON côté serveur ou Java):

  1. Utilisez une représentation sous forme de chaîne d'un jeton d'accès Keycloak qu'une tierce partie m'a donné pour vérifier que le jeton est valide.

  2. Si le jeton est valide, obtenez l'ID Keycloak pour cet utilisateur.

Comment est-ce que je fais ceci en utilisant de vieux posts HTTP simples? J'ai trouvé de nombreux exemples Java, mais j'ai besoin de connaître les HTTP POST brutes et leurs réponses.

Est-ce quelque chose comme ça pour valider le jeton?

/auth/realms/<realm>/protocols/openid-connect/validate?access_token=accesstokenhere

Qu'est-ce que cela renvoie en termes de données (désolé, je n'ai actuellement aucun serveur de test à interroger)?

Merci.

6
lilalfyalien

Le point de terminaison validé ne semble pas fonctionner maintenant. Auparavant, il retournait un jeton d'accès. J'utilise la keycloak 2.5.1 maintenant. Comme mentionné dans le message de Matyas (et dans le post référencé par lui), devait utiliser introspect token endpoint.

Lors de mes tests, l'authentification du porteur ne fonctionnait pas. Doit utiliser l’en-tête d’authentification de base avec le code base64 informations d’identification client .

base64.encode("<client_id:client_secret>".getBytes("utf-8"))

La réponse du point de terminaison introspect est au format JSON, tel que partagé dans la publication référencée par Maytas. Plusieurs champs sont basés sur le type de jeton en cours d’introspection. Dans mon cas, token_type_hint était défini comme access_token.

requestParams = "token_type_hint=access_token&token=" + accessToken

La réponse incluait les informations utilisateur requises telles que le nom d'utilisateur, les rôles et l'accès aux ressources. Les attributs obligatoires OAuth, tels que actif, exp, iss etc., sont également inclus. Voir rfc7662 # page-6 pour plus de détails.

3
mssuley

Peut-être avez-vous besoin de ceci: http://lists.jboss.org/pipermail/keycloak-user/2016-avril/005869.html

Le seul problème est que, introspect ne fonctionne pas avec les clients publics.

L'URL de la clé est la suivante: "http: // $ KC_SERVER/$ KC_CONTEXT/realms/$ REALM/protocole/openid-connect/token/introspect"

Vous devez autoriser votre client, par exemple. avec une autorisation de base, et il faut donner le jeton demandeur à l'introspection:

curl -u "client_id:client_secret" -d "token=access_token_to_introspect" "http://$KC_SERVER/$KC_CONTEXT/realms/$REALM/protocol/openid-connect/token/introspect"
2
Mátyás Bachorecz