web-dev-qa-db-ja.com

Spring Boot Keycloak統合によるOAuth2クライアント資格情報フロー

私のアプリケーションは以下で構成されています:

  • バックエンド/リソースサーバー
  • UI webapp
  • キークローク

UIは、認証コード付与フローを備えたキークローククライアントを使用して、RESTful API経由でバックエンドサーバーと通信しています。これは正常に動作しています。

ここで、システム/サービスアカウントを使用してバックエンドのリソースにアクセスする追加の可能性が必要です(通常、ユーザーよりも多くの権限が必要です)。この要件をどのように実装しますか?ここでは、クライアントの資格情報フローが役立つと思いました。

Spring BootのキークローククライアントでOAuth2クライアント資格情報フローを使用することは可能ですか? Spring Security OAuth2クライアント機能を使用してクライアント認証情報フローを実現する例を見つけましたが、OAuthのことにはすでにキークローククライアントを使用しているため、奇妙に感じます。

編集:ソリューション

私を大いに助けてくれたあなたの答えをありがとう。 UI Webアプリケーションで、認証済みユーザーのOAuth2トークンを使用するか、UIサービスアカウントのクライアント資格情報フローからのトークンを使用して、バックエンドと通信できるようになりました。それぞれの方法には独自のRestTemplateがあり、最初の方法はキークローク統合を介して行われ、2番目は説明されているようにSpring Security OAuth2によって行われます here

6
Steffen Harbich

同様の要件があり、ユーザーuuidでユーザーの電子メールを取得しました。

サービスユーザーを作成し、ユーザーに「realm-management」->「view-users」の役割があることを確認します(query-usersの場合もあります)

プロセスは簡単です。サービスユーザーでキークロークにログインし(プロパティファイルにパスワードやユーザー名をエンコードしておく)、認証ヘッダーにaccessTokenを付けてキークロークにリクエストします。

GET http:// {yourdomainadress}/auth/admin/realms/{yourrealmname}/users/{userId}

REST APIを使用してkeycloakにログインする方法:

POST http:// {yourdomainadress}/auth/realms/{yourrealmname}/protocol/openid-connect/token

ヘッダー:

Content-Type:application/x-www-form-urlencoded

本文x-www-form-urlencoded:

client_id:your-client

ユーザー名:使用しているユーザー

パスワード:ユーザーのパスワード

grant_type:パスワード

client_secret:11112222-3333-4444-5555-666666666666(クライアントの「アクセスタイプ」= "confidential"の場合、クライアントシークレットが必要です)

短時間:サービスユーザーに、操作、ログイン、クエリキークロークを実行するための適切な役割が割り当てられていることを確認します(ドキュメントをチェックして、適切なクエリURLとパラメーターを取得し、常にやりがいがあります)。

0
Dmitri Algazin