Keycloak-Inhaber-Kunden: Warum gibt es sie?

10

Ich versuche, mich mit dem Konzept der bearer-onlyKunden in Keycloak zu beschäftigen.

Ich verstehe das Konzept von öffentlich gegen vertraulich und das Konzept von Dienstkonten und so grant_type=client_credentials. Aber mit bearer-onlystecke ich fest.

Googeln enthüllt nur Fragmente von Diskussionen, die sagen:

Sie können mit einem bearer-onlyClient kein Token von keycloak erhalten .

Die Dokumente sind ebenfalls unklar. Sie sagen nur:

Nur-Träger-Zugriffstyp bedeutet, dass die Anwendung nur Träger-Token-Anforderungen zulässt.

Ok, wenn meine App nur Inhaber-Token-Anfragen zulässt, wie erhalte ich dieses Token, wenn ich es nicht mit der Client-ID / dem Client-Geheimnis von Keycloak erhalten kann?

Und wenn Sie keinen Token erhalten können, was können Sie überhaupt? Warum gibt es diese Kunden? Kann jemand bitte ein Beispiel für die Verwendung dieser Art von Client geben?

kurtgn
quelle

Antworten:

5

Nach meinem Verständnis wird es verwendet, wenn Sie einen internen Service haben. Nehmen wir an, Sie haben ServiceAund ServiceB. Ein Benutzer ruft an, ServiceAwas in der Hand anruft ServiceB. ServiceBwird vom Benutzer niemals direkt aufgerufen, sondern nur von anderen Diensten. ServiceAerhält ein Token unter Verwendung der Anmeldeinformationen des Benutzers. Und dann wird dieses Token zum Aufrufen verwendet ServiceB. ServiceBwird niemals ein Login initiieren. Es wird nur das Token verwendet, um die Berechtigungen zu überprüfen.

In diesem Fall ist ServiceA confidentialund ServiceB bearer-onlyClient.

Yuriy P.
quelle
1
Wenn mein Client nur Inhaber ist, steht mir nur die Möglichkeit zur Verfügung, Verifizierungsanfragen an Keycloak zu senden, um sicherzustellen, dass das Token von ServiceAgültig ist. Recht? Aber wenn dies der Fall ist, warum überhaupt Keycloak anrufen? Wenn mein Client über einen öffentlichen Keycloak-Schlüssel verfügt, kann er diesen mit diesem Schlüssel überprüfen, ohne jemals Keycloak aufrufen zu müssen.
Kurtgn
Wegen des Token-Bereichs. Service A sollte einen anderen Bereich als Service B haben, daher benötigen Sie Keycload für den Token-Austausch
Julian Egner
@JulianEgner Dies ist sinnvoll, außer dass Token Exchange derzeit in der technischen Vorschau angezeigt wird, nicht vollständig unterstützt wird und explizit mit einer Env-Variablen aktiviert werden muss. Ist es bearer-onlywirklich nur vorhanden, um diesen Anwendungsfall zu unterstützen, der noch nicht fertig ist?
Irbull
@irbull Woher hast du die Information, dass der Token-Austausch in der technischen Vorschau stattfinden würde?
Julian Egner
@ JulianEgner Es wurde ganz unten in ihren Dokumenten aufgeführt. In keycloak.org/docs/latest/securing_apps/… ist aufgeführt: "Token Exchange ist eine Technologievorschau und wird nicht vollständig unterstützt. Diese Funktion ist standardmäßig deaktiviert."
Irbull
5

Bedeutung des Zugriffstyps nur für Inhaber

Nur-Träger-Zugriffstyp bedeutet, dass die Anwendung nur Träger-Token-Anforderungen zulässt. Wenn diese Option aktiviert ist, kann diese Anwendung nicht an Browser-Anmeldungen teilnehmen.

Wenn Sie also Ihren Client als auswählen bearer-only, versucht der Keycloak-Adapter in diesem Fall nicht, Benutzer zu authentifizieren, sondern überprüft nur die Inhaber-Token. Aus diesem Grund erlaubt die Keycloak-Dokumentation, in der auch die bearer-onlyAnwendung erwähnt wird, die Anmeldung über den Browser nicht.

Und wenn Sie keinen Token erhalten können, was können Sie überhaupt? Warum gibt es diese Kunden?

Ihr Client kann auf Keycloak Server nicht nur als Inhaber festgelegt werden. Sie können jedoch weiterhin nur Träger für die Adapterkonfiguration verwenden. Keycloak erlaubt nicht, dass "nur Inhaber" -Clients (beim Einrichten Ihres Clients auf dem Server) Token vom Server erhalten. Versuchen Sie, Ihren Client auf dem Server auf "vertraulich" zu ändern und in Ihrer Adapterkonfiguration (keycloak.json) nur Träger zu setzen.

Wenn Sie also die obige Aussage verstehen, werden Anrufer confidentialund Angerufene sein, wenn Sie zwei Mikrodienste haben, die in dem Fall miteinander sprechenbearer-only

Und Keycloak auch erwähnt

Nur-Inhaber-Clients sind Webdienste, die niemals eine Anmeldung initiieren. Sie werden normalerweise zum Sichern des Back-End verwendet.

Wenn Sie also einen Adapter verwenden möchten, den Sie je bearer-onlynach Bedarf verwenden können

Subodh Joshi
quelle
1
danke Subodh für deine Erklärung! Wenn mein Client nur Inhaber ist, stehen mir nur Bestätigungsanfragen an Keycloak zur Verfügung, um sicherzustellen, dass das Token gültig ist. Recht? Aber wenn dies der Fall ist, warum überhaupt Keycloak anrufen? Wenn mein Client über einen öffentlichen Keycloak-Schlüssel verfügt, kann er diesen mit diesem Schlüssel überprüfen, ohne jemals Keycloak aufrufen zu müssen.
Kurtgn
@kurtgn Wenn Sie einen Adapter verwenden, dann werde ich nur empfehlen, die bearer-onlyansonsten machen Ihren Clientconfidential
Subodh Joshi
Nein, ich benutze keine Adapter, ich codiere in Python, es gibt keine Python-spezifischen Adapter für Keycloak, also muss ich generische OIDC-Bibliotheken verwenden
Kurtgn
Welche Bibliothek verwenden Sie mit Keycloak + Python Integration?
Subodh Joshi
0

Kurze Antwort: Sie können kein Zugriffstoken mit einem Nur-Inhaber-Client erhalten, aber Sie können ein Zugriffstoken erhalten, das ein Nur-Inhaber-Client mit einem anderen Client akzeptieren kann.

Weitere Details Nur-Inhaber-Clients stellen Back-End-Anwendungen wie Webdienste dar, die von der Frontanwendung aufgerufen und vom Autorisierungsserver (= Schlüsselumhang) gesichert werden.

Backend- / Webdienstanwendungen werden nicht direkt vom Benutzer aufgerufen, sodass sie nicht im interaktiven Oauth2.0-Benutzerfluss abgespielt werden können. Wenn Sie "Nur Inhaber" festlegen, wird diese Tatsache auf dem Keycloak-Server dokumentiert, sodass der Administrator den Client ohne ansonsten obligatorische Werte konfigurieren kann (z. B. uri umleiten…) und nützliche Fehlermeldungen zulassen können, wenn jemand versucht, ein Token für einen solchen Client zu erhalten

Dies bedeutet jedoch nicht, dass Sie keine bestimmten Rollen für diesen Client konfigurieren können. Daher muss er im Schlüsselumhüllungsbereich angezeigt werden.

Darüber hinaus muss der Nur-Inhaber-Client das empfangene Zugriffstoken überprüfen. Insbesondere wenn diese (empfohlene) Adapterfunktion "Token-Zielgruppe überprüfen" aktiviert ist, muss der Nur-Inhaber-Client überprüfen, ob das Zugriffstoken für dieses Token ausgestellt wurde: Der Client nur für Inhaber muss sich im Zielgruppenattribut des Zugriffstokens befinden: siehe https://www.keycloak.org/docs/latest/server_admin/index.html#_audience

Für die Zielgruppenverwaltung über Keycloak müssen Nur-Inhaber-Clients im Keycloak-Bereich registriert sein.

Thomas LIMIN
quelle