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"
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]).
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].
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.