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"

person arkadiy kraportov    schedule 30.11.2018    source источник
comment
Вы когда-нибудь находили решение? Я столкнулся с той же проблемой и не знаю, как это исправить   -  person xxSwordy    schedule 05.12.2018


Ответы (3)


В последней версии keycloak 4.6.0 идентификатор клиента, по-видимому, больше не добавляется автоматически в поле аудитории «aud» токена доступа. Таким образом, даже если вход в систему прошел успешно, клиент отклоняет пользователя. Чтобы исправить это, вам необходимо настроить аудиторию для ваших клиентов (сравните документ [2]).

Настроить аудиторию в Keycloak

  • Добавить область или настроить существующую
  • Добавить клиентское приложение my-app или использовать существующее
  • Goto to the newly added "Client Scopes" menu [1]
    • Add Client scope 'good-service'
    • Within the settings of the 'good-service' goto Mappers tab
      • Create Protocol Mapper 'my-app-audience'
        • Name: my-app-audience
        • Выберите тип картографа: Аудитория
        • Включенная клиентская аудитория: my-app
        • Добавить в токен доступа: вкл.
  • Configure client my-app in the "Clients" menu
    • Client Scopes tab in my-app settings
    • Добавьте доступные клиентские области "хорошее обслуживание" в назначенные клиентские области по умолчанию.

Если у вас более одного клиента, повторите шаги для других клиентов и добавьте область хорошего обслуживания. За этим стоит намерение изолировать доступ клиентов. Выданный токен доступа будет действителен только для целевой аудитории. Это подробно описано в документации Keycloak [1,2].

Ссылки на последнюю основную версию документации keycloak:

Ссылки с тегом git:

person rfs    schedule 05.12.2018
comment
Я все еще получаю ту же ошибку, похоже, привратник все еще проверяет client_id, хотя я подтвердил, что токен имеет область действия good-service. - person christopher clark; 12.04.2019
comment
Работает для меня. На самом деле шаги могут быть проще. Области клиента - это общие сопоставители и роли. Здесь мы можем просто добавить маппер для моего клиента. 1. отредактируйте мой клиент 2. откройте вкладку mapper 3. Создайте сопоставитель протоколов my-app-audit. Значение такое же, как и в этом ответе. - person popcorny; 21.07.2019
comment
у меня не работает - person Kuldeep; 26.12.2020

Это связано с ошибкой: https://issues.jboss.org/browse/KEYCLOAK-8954 < / а>

Есть два обходные пути, описанные в отчете об ошибке, оба из них, похоже, делают в основном то же самое, что и принятый здесь ответ, но могут применяться к клиентской области role, поэтому не обязательно применять их к каждому клиенту индивидуально.

person Old Pro    schedule 27.04.2019

Если, как и я, вы хотите автоматизировать конфигурацию keycloak, вы можете использовать kcadm

/opt/jboss/keycloak/bin/kcadm.sh \
        create clients/d3170ee6-7778-413b-8f41-31479bdb2166/protocol-mappers/models -r your-realm \
        -s name=audience-mapping \
        -s protocol=openid-connect \
        -s protocolMapper=oidc-audience-mapper \
        -s config.\"included.client.audience\"="your-audience" \
        -s config.\"access.token.claim\"="true" \
        -s config.\"id.token.claim\"="false"
person SvenDowideit    schedule 06.04.2020