web-dev-qa-db-fra.com

Keycloak-gatekeeper: la revendication 'aud' et 'client_id' ne correspondent pas

Quelle est la bonne façon de définir la revendication aud pour éviter l'erreur ci-dessous?

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"}

J'ai un peu contourné ce message d'erreur en codant en dur aud prétendant être le même que mon client_id. Y a-t-il une meilleure façon?

Voici mon 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

Avec la récente version 4.6.0 de keycloak, l'ID client n'est apparemment plus automatiquement ajouté au champ d'audience "aud" du jeton d'accès. Par conséquent, même si la connexion réussit, le client rejette l'utilisateur. Pour résoudre ce problème, vous devez configurer l'audience de vos clients (comparer le document [2]).

Configurer l'audience dans Keycloak

  • Ajouter un domaine ou configurer un existant
  • Ajouter une application cliente ou utiliser une application existante
  • Accéder au menu "Étendues client" nouvellement ajouté [1]
    • Ajouter une portée client "bon service"
    • Dans les paramètres de l'onglet goto Mappers "bon service"
      • Créez le mappeur de protocoles "my-app-audience"
        • Nom: my-app-audience
        • Choisissez le type de mappeur: Audience
        • Public client inclus: my-app
        • Ajouter au jeton d'accès: activé
  • Configurer client my-app dans le menu "Clients"
    • Onglet Étendues client dans les paramètres de mon application
    • Ajouter des étendues de client disponibles "bon service" aux étendues de client par défaut attribuées

Si vous avez plusieurs clients, répétez également les étapes pour les autres clients et ajoutez la portée de bon service. L'intention derrière cela est d'isoler l'accès client. Le jeton d'accès émis ne sera valable que pour le public cible. Ceci est décrit en détail dans la documentation de Keycloak [1,2].

Liens vers la récente version principale de la documentation de keycloak:

Liens avec git tag:

40
rfs

Cela est dû à un bug: https://issues.jboss.org/browse/KEYCLOAK-8954

Il y a deuxsolutions de contournement décrites dans le rapport de bogue, qui semblent faire essentiellement la même chose que le réponse acceptée ici mais peuvent être appliquées à l'étendue du client role, vous n'avez donc pas à les appliquer individuellement à chaque client.

8
Old Pro