web-dev-qa-db-de.com

Keycloak: Überprüfen Sie das Zugriffstoken und rufen Sie die Keycloak-ID ab

Ich muss in der Lage sein, Folgendes zu tun (mit einfachem cURL & JSON-Server-Side-No-Frameworks oder Java):

  1. Verwenden Sie eine Zeichenfolgendarstellung eines Keycloak-Zugriffstokens, das ich von einer dritten Partei erhalten habe, um zu überprüfen, ob das Token gültig ist.

  2. Wenn das Token gültig ist, rufen Sie die Keycloak-ID für diesen Benutzer ab.

Wie mache ich das mit einfachen alten HTTP-Posts? Ich habe viele Java-Beispiele gefunden, muss aber die grundlegenden HTTP-POSTs und Antworten kennen.

Ist es so etwas, um das Token zu validieren?

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

Was gibt dies in Bezug auf Daten zurück (Entschuldigung, ich habe derzeit keinen Test-Server zum Abfragen)?

Vielen Dank.

6
lilalfyalien

Der Validate-Endpunkt scheint jetzt nicht zu funktionieren. Es wurde verwendet, um Zugriffstoken zurückzugeben. Ich benutze jetzt den Schlüsselmantel 2.5.1. Wie in Post von Matyas (und in dem von ihm referenzierten Post ) erwähnt, musste Endpunkt Introspect Token verwendet werden.

In meinem Test hat die Bearer-Authentifizierung nicht funktioniert. Musste Basic-Authentifizierungsheader zusammen mit base64-codierten Clientanmeldeinformationen verwenden.

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

Die Antwort vom Introspect-Endpunkt ist im JSON-Format, wie in der von Maytas referenzierten Veröffentlichung angegeben, und enthält viele Felder, die auf dem Typ des zu überprüfenden Tokens basieren. In meinem Fall wurde token_type_hint als access_token festgelegt.

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

Die Antwort enthielt erforderliche Benutzerdetails wie Benutzername, Rollen und Ressourcenzugriff. Enthält auch OAuth-Attribute wie active, exp, iss usw. Weitere Informationen finden Sie unter rfc7662 # page-6.

3
mssuley

Möglicherweise benötigen Sie Folgendes: http://lists.jboss.org/pipermail/keycloak-user/2016-April/005869.html

Das einzige Problem ist, dass introspect nicht mit öffentlichen Kunden zusammenarbeitet.

Die Schlüssel-URL lautet: "http: // $ KC_SERVER/$ KC_CONTEXT/realms/$ REALM/protocol/openid-connect/token/introspect"

Sie müssen Ihren Client autorisieren, z. mit grundlegender Berechtigung und der Notwendigkeit, das Anforderungs-Token für introspect bereitzustellen:

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