キークロークベアラーのみのクライアント:なぜ存在するのですか?


10

私はbearer-onlyKeycloak のクライアントの概念に頭を抱えようとしています。

私は、公開vs機密の概念と、サービスアカウントなどの概念を理解していますgrant_type=client_credentials。しかし、bearer-onlyと私は行き詰まっています。

グーグルすると、次のような議論の断片が明らかになります。

bearer-onlyクライアントでkeycloakからトークンを取得することはできません。

ドキュメントも不明確です。彼らが言うすべては:

ベアラーのみのアクセスタイプは、アプリケーションがベアラートークンリクエストのみを許可することを意味します。

アプリでベアラトークンリクエストのみを許可している場合、クライアントID /クライアントシークレットを使用してKeycloakから取得できない場合、このトークンを取得するにはどうすればよいですか?

トークンを取得できない場合、何ができますか?なぜこれらのクライアントが存在するのですか?誰かがこのタイプのクライアントの使用例を提供できますか?

回答:


5

私の理解では、内部サービスがある場合に使用されます。あなたが持っているServiceAとしましょうとServiceB。ユーザーが呼び出すServiceA手元にServiceBServiceBユーザーから直接呼び出されることはなく、他のサービスからのみ呼び出されます。ServiceAユーザーの資格情報を使用してトークンを取得します。そして、このトークンを使用して呼び出しますServiceBServiceBログインを開始することはありません。トークンを使用して権限を確認します。

この場合、ServiceAがクライアントになりconfidential、ServiceBがbearer-onlyクライアントになります。


1
つまり、これは、クライアントがベアラのみの場合、Keycloakに検証リクエストを送信して、トークンServiceAが有効であることを確認することしかできないことを意味します。正しい?しかし、これが事実である場合、なぜKeycloakを呼び出すのですか?クライアントが公開Keycloakキーを持っている場合、Keycloakを呼び出すことなく、このキーを使用してそれを確認できます。
kurtgn

トークンスコープのため。サービスAにはサービスB以外のスコープが必要であるため、トークン交換にはKeycloadが必要です
Julian

@JulianEgnerこれは、Token Exchangeが現在Tech Previewにあり、完全にはサポートされておらず、Env変数で明示的にオンにする必要があることを除いて、理にかなっています。あるbearer-onlyだけで、まだ準備ができていない。このユースケースをサポートするための場所では本当に?
irbull

@irbullトークンの交換が技術プレビューになるという情報はどこで入手しましたか?
Julian Egner、

@JulianEgner彼らのドキュメントの一番下にリストされていました。keycloak.org/docs/latest/securing_apps/…にリストされています。「トークン交換はテクノロジープレビューであり、完全にはサポートされていません。この機能はデフォルトで無効になっています。」
irbull

5

ベアラのみのアクセスタイプの意味

ベアラーのみのアクセスタイプは、アプリケーションがベアラートークンリクエストのみを許可することを意味します。これがオンになっている場合、このアプリケーションはブラウザログインに参加できません。

そのため、クライアントを選択bearer-onlyした場合、その場合、キークロークアダプターはユーザーの認証を試みず、ベアラートークンのみを検証します。keycloakのドキュメントでもbearer-onlyアプリケーションについて言及している理由は、ブラウザからのログインを許可しないためです。

トークンを取得できない場合、何ができますか?なぜこれらのクライアントが存在するのですか?

Keycloakサーバーでクライアントをベアラのみとして設定することはできません。ただし、アダプター構成ではベアラーのみを使用できます。Keycloakでは、「ベアラのみ」のクライアント(サーバーでクライアントを設定する場合)がサーバーからトークンを取得することはできません。サーバーでクライアントを「機密」に変更し、アダプター構成(keycloak.json)でベアラのみを設定してみてください。

したがって、上記のステートメントを理解している場合、ケースで互いに通信している2つのマイクロサービスがある場合、呼び出し元はconfidential呼び出し先となり、呼び出し先はbearer-only

そしてKeycloakも言及しました

ベアラーのみのクライアントは、ログインを開始しないWebサービスです。通常は、バックエンドを保護するために使用されます。

したがって、必要に応じて使用できるアダプタを使用したいbearer-only場合


1
あなたの説明のためのSubodhに感謝します!つまり、これは、クライアントがベアラのみの場合、トークンが有効であることを確認するためにKeycloakに検証リクエストを送信することしか利用できないことを意味します。正しい?しかし、これが事実である場合、なぜKeycloakを呼び出すのですか?クライアントが公開Keycloakキーを持っている場合、Keycloakを呼び出すことなく、このキーを使用してそれを確認できます。
kurtgn

@kurtgnアダプタを使用しているbearer-only場合は、他の方法でクライアントを作成することをお勧めしますconfidential
Subodh Joshi

いいえ、私はアダプターを使用していません。Pythonでコーディングしています。KeycloakにはPython固有のアダプターがないため、汎用OIDCライブラリを使用する必要があります
kurtgn

Keycloak + Python統合で使用しているライブラリはどれですか?
Subodh Joshi


0

短い答え:無記名専用クライアントを使用してアクセストークンを取得することはできませんが、無記名専用クライアントが別のクライアントを使用して受け入れることができるアクセストークンを取得することはできます。

詳細情報ベアラーのみのクライアントは、フロントアプリケーションによって呼び出され、承認サーバー(=キークローク)によって保護された、Webサービスなどのバックエンドアプリケーションを効果的に表します。

バックエンド/ Webサービスアプリケーションはユーザーから直接呼び出されないため、Oauth2.0ユーザーのインタラクティブフローで再生できません。「無記名のみ」のドキュメントをキークロークサーバーに設定すると、管理者は必須の値なしでクライアントを構成でき(例:リダイレクトuri…)、そのようなクライアントのトークンを取得しようとした場合に役立つエラーメッセージが許可されます。

ただし、これは、このクライアントに特定のロールを構成できないことを意味するわけではありません。したがって、キークロークレルムに表示される必要があります。

さらに、無記名専用クライアントは、受信したアクセストークンを確認する必要があります。特に、この(推奨)アダプター機能「verify-token-audience」がアクティブ化されている場合、無記名専用クライアントは、アクセストークンが発行されたことを確認する必要があります。無記名のみのクライアントは、アクセストークンのaudience属性に含まれている必要があります。https//www.keycloak.org/docs/latest/server_admin/index.html#_audienceを参照してください。

キークロークで管理するオーディエンスの場合、ベアラのみのクライアントをキークロークレルムに登録する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.