web-dev-qa-db-ja.com

Keycloak-gatekeeper:「aud」クレームと「client_id」が一致しません

以下のエラーを回避するためにaudクレームを設定する正しい方法は何ですか?

unable to verify the id token   {"error": "oidc: JWT claims invalid: invalid claims, 'aud' claim and 'client_id' do not match, aud=account, client_id=webapp"}

audが自分のclient_id。より良い方法はありますか?

これが私のdocker-compose.yml

version: '3'
services:
  keycloak-proxy:
    image: "keycloak/keycloak-gatekeeper"
    environment:
     - PROXY_LISTEN=0.0.0.0:3000
     - PROXY_DISCOVERY_URL=http://keycloak.example.com:8181/auth/realms/realmcom
     - PROXY_CLIENT_ID=webapp
     - PROXY_CLIENT_SECRET=0b57186c-e939-48ff-aa17-cfd3e361f65e
     - PROXY_UPSTREAM_URL=http://test-server:8000
    ports:
      - "8282:3000"
    command:
      - "--verbose"
      - "--enable-refresh-tokens=true"
      - "--enable-default-deny=true"
      - "--resources=uri=/*"
      - "--enable-session-cookies=true"
      - "--encryption-key=AgXa7xRcoClDEU0ZDSH4X0XhL5Qy2Z2j"
  test-server:
    image: "test-server"
12
arkadiy

最近のkeycloakバージョン4.6.0では、クライアントIDはアクセストークンのオーディエンスフィールド「aud」に自動的に追加されていないようです。したがって、ログインは成功しても、クライアントはユーザーを拒否します。これを修正するには、クライアントのオーディエンスを構成する必要があります(doc [2]と比較してください)。

Keycloakで対象ユーザーを構成する

  • レルムの追加または既存の構成
  • クライアントmy-appを追加するか、既存のものを使用します
  • 新しく追加された[クライアントスコープ]メニューに移動します[1]
    • クライアントスコープ「good-service」を追加します
    • 「good-service」の設定内で、「マッパー」タブに移動します
      • プロトコルマッパー 'my-app-audience'を作成します
        • 名前:my-app-audience
        • マッパーのタイプを選択:オーディエンス
        • 含まれるクライアントオーディエンス:my-app
        • アクセストークンに追加:オン
  • [クライアント]メニューでクライアントmy-appを構成します
    • My-app設定の[クライアントスコープ]タブ
    • 割り当てられたデフォルトのクライアントスコープに利用可能なクライアントスコープ「good-service」を追加します

複数のクライアントがある場合、他のクライアントについても同様の手順を繰り返し、good-serviceスコープを追加します。この背後にある意図は、クライアントアクセスを分離することです。発行されたアクセストークンは、対象ユーザーに対してのみ有効です。これは、Keycloakのドキュメント[1,2]で詳細に説明されています。

Keycloakドキュメントの最新のマスターバージョンへのリンク:

Gitタグとのリンク:

40
rfs

これはバグが原因です: https://issues.jboss.org/browse/KEYCLOAK-8954

two回避策 がバグレポートに記載されており、どちらも基本的に 受け入れられた回答 と同じように見えますが、適用できますクライアントスコープroleに追加されるため、すべてのクライアントに個別に適用する必要はありません。

8
Old Pro