私のセットアップには3つのコンポーネントがあります。
フロントエンドはKeycloakを使用して、ユーザーがサインインし、アクセストークンを使用してバックエンドへのリクエストを認証できるようにします。ここまでは順調ですね。
今、私はサードパーティのアプリケーションがバックエンドに対して認証されたリクエストを行えるようにしたいのですが、Keycloakを使用してそれをどのように実現できるのでしょうか?私の考えは、顧客ごとに新しい資格情報を発行することです。その後、アプリケーションはKeycloakと通信してアクセストークンを取得します。その後、Keycloakを使用して、APIのすべてのユーザーのアクセス制御を管理できます。
最終的に、うまく機能し、外部アプリケーションに資格情報を発行するための「キークローク方法」であると思われるソリューションを見つけました。資格情報の新しいセットを作成するには、新しいKeycloakクライアントを追加し、次の設定を変更します。
外部アプリケーションは、新しく作成されたクライアントの名前をclient_id
として使用します。 client_secret
は自動的に生成され、Credentialsタブにあります。
Keycloakで保護されたサービスが着信ベアラートークンのaud
クレームをチェックするように構成されている場合、2番目のステップが必要です。デフォルトでは、Keycloakがクライアントに発行するJWTトークンの対象者はクライアントの名前に設定されるため、サービスによって拒否されます。 Client Scopes を使用して、その動作を変更できます。
Keycloakは、新しいクライアントに発行するすべてのJWTトークンのaud
クレームにサービスの名前を追加します。詳細については、 サービスアカウント のKeycloakのドキュメントをご覧ください。
外部アプリケーションは、その資格情報を使用して、Keycloakのトークンエンドポイントからアクセストークンを取得できるようになりました。
POST {keycloak-url}/auth/realms/atlas/protocol/openid-connect/token
Content-Type
ヘッダーをapplication/x-www-form-urlencoded
に設定しますgrant_type=client_credentials
を設定します