2017-09-28 5 views
2

Gibt es eine Möglichkeit, eine Liste von Benutzern in einem Keycloak-Realm über REST OHNE mit einem Administratorkonto abzurufen? Vielleicht eine zuweisbare Rolle von der Admin-Konsole? Auf der Suche nach irgendwelchen Ideen.So erhalten Sie Keycloak-Benutzer über REST ohne Administratorkonto

Momentan verwende ich Admin-Anmeldedaten, um ein Zugriffstoken zu erhalten, und benutze dann dieses Token, um Benutzer vom realm/users-Endpunkt abzurufen.

Erste das Token (aus node.js App via request):

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

das Token verwenden:

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

Ich möchte allgemeine Benutzerinformationen verwenden können (Benutzernamen, E-Mails, Vollnamen) aus einer Client-Anwendung.

Antwort

3

Sie müssen die view-users-Rolle vom realm-management-Client für den gewünschten Benutzer zuweisen. Das wäre die Konfiguration für den Anwender:

enter image description here

Dann können Sie alle Benutzer aus dem ${keycloakUri}/admin/realms/${keycloakRealm}/users Endpunkt greifen. Das ist die Info aus dem enpoint abgerufen, accesed über Postman:

enter image description here

Auch in keinem Zusammenhang mit der gestellten Frage, ich empfehlen Ihnen dringend, nicht grant_type=password zu verwenden, es sei denn, Sie absolutelly benötigen. Von den keycloak blog:

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

Das ist ein bisschen kryptisch und zum Glück ist dies nicht, wie Sie wirklich zu erhalten Tokens sein sollten. Tokens sollten von Webanwendungen erhalten werden, indem auf die Keycloak-Anmeldeseite umgeleitet wird. Wir machen das nur, damit wir den Dienst testen können, da wir noch keine Anwendung haben, die den Dienst aufrufen kann. Im Wesentlichen führen wir hier den OpenD Connect-Token-Endpoint Keycloaks mit dem Grant-Typ "password" aus, bei dem es sich um den Ressourceneigentümer-Berechtigungsfluss handelt, der den Austausch eines Benutzernamens und eines Kennworts für ein Token ermöglicht.

Siehe auch die Oauth2 spec.

+0

Vielen Dank für Ihre Antwort. Was würdest du anstelle eines Passwortes empfehlen? Die node.js-App, die Benutzer erhalten wird, ist eine rein dev-only-App, die Benutzer lesen muss - sie wird in einem cron-job-Typ auf einem gesicherten Server ausgeführt. Im Moment verwendet es die in einer lokalen JSON-Datei gespeicherten Admin-Creds, um das Lesen durchzuführen. Ich kann diese Admin-Credits in der JSON-Datei für die Creds eines Benutzers mit NUR der Rolle view-users wechseln, wie Sie oben beschrieben haben. Gibt es einen besseren Weg? –

+1

Wenn es ein Cron ist, der auf den Benutzer zugreift, würde ich lieber mit [Client-Berechtigungsnachweis] gehen (https://auth0.com/docs/api-auth/tutorials/client-credentials). Auf diese Weise speichern Sie Ihr Clientgeheimnis im lokalen JSON und loggen sich als CLIENT ein (ich weiß nicht, ob dies im Adapter implementiert ist, aber ansonsten ist es einfach, es manuell zu tun, überprüfen Sie meinen Link). Dann müssen Sie das Token genau so verwalten, wie es für einen Benutzer wäre (Aktualisieren). Siehe auch https://stackoverflow.com/questions/41756879/keycloak-client-credentials-flow-clarification Happy code ;-) –

+1

Danke! Viel Spaß mit dem Kopfgeld :) –

Verwandte Themen