web-dev-qa-db-fra.com

Problème de Keycloak CORS lors de la redirection vers la connexion

J'essaie de faire fonctionner l'adaptateur nodeJS keycloak avec mon application Express, mais je suis confronté à un problème CORS lorsqu'il tente de rediriger vers la page de connexion pour les itinéraires que j'ai protégés avec le middleware keycloak:

XMLHttpRequest ne peut pas se charger http://192.168.132.44:8080/auth/realms/Actora/protocol/openid-connect/auth?client_id=actora-test&state=0e9c9778-c41b-4aa8-8052-d0f0125045ac&redirect%3Ah % 2F% 2Flocalhost% 3A5001% 2Fauth% 2Fchecktoken% 3Fauth_callback% 3D1 & scope = openid & response_type = code . La réponse à la demande de contrôle en amont ne passe pas la vérification du contrôle d'accès: aucun en-tête "Access-Control-Allow-Origin" n'est présent sur la ressource demandée. L'origine ' http: // localhost: 5001 ' n'est donc pas autorisée à accéder.

Dans mes paramètres de client keycloak, j'ai ajouté une valeur unique de "*" à la section de configuration de Web Origins.

J'ai également activé les cors sur mon application node express en utilisant la bibliothèque node cors, en suivant ce guide express ici

var cors =  require('cors'),
  app = express();

app.use(cors());
app.options('*', cors()); //enable for all pre-flight requests

J'utilise la version 3.2.1 de keycloak au cas où cela ferait une différence (je vois qu'une nouvelle version est sortie en tant que RC)

Quelqu'un a-t-il rencontré des problèmes similaires et réussi à les résoudre? J'ai parcouru de nombreux threads de liste de diffusion JBOSS et d'autres stackoverflows, et tous semblent suggérer que c'est aussi simple que d'ajouter l'entrée '*' à la section de configuration des origines Web pour le client sur le site d'administration de keycloak mais ce n'est pas le cas pour moi.

Merci

9
mindparse

Je travaille également sur cette question avec mindparse.

Je pense que le problème clé ici est que le serveur keycloak ne répond avec aucun en-tête ACCESS-CONTROL-ALLOW-Origin malgré le fait qu'il a correctement configuré le paramètre "Web Origins" dans le portail d'administration keycloak.

Un flux plus approfondi du processus est:

  1. L'utilisateur tente d'appeler une route sécurisée keycloak sur un serveur express de noeud
  2. L'intergiciel Keycloak détecte que l'utilisateur n'est pas authentifié et répond à la demande avec un 302 (redirection) vers une page de connexion personnalisée hébergée par le serveur keycloak.
  3. Le navigateur envoie une requête OPTIONS au serveur keycloak pour vérifier si c'est parce qu'il s'agit d'une requête Cross Origin.
  4. La réponse des serveurs keycloak N'INCLUT PAS l'en-tête ACCESS-CONTROL-ALLOW- Origin pour indiquer au navigateur qu'il est autorisé à effectuer cette demande.
  5. Le navigateur lit ensuite cette réponse et ne fait donc pas de demande de suivi car il n'a pas réussi le contrôle d'accès autoriser les vérifications d'origine
12
Andy

J'ai eu exactement le même problème. J'utilise Keycloak 6.0.1

Dans mon cas, j'ai dû ajouter "enable-cors": true Dans keycloak.json Sur mon serveur principal Java.

Par la suite, j'ai eu un autre problème: 401 UNAUTHORIZED. Ce message a résolu le problème

2
Zerotwelve

Mettez simplement l'URL de votre application comme " http: // localhost: 8081 " dans le champ "Web Origins" des paramètres du client dans Keycloak.

0
Janet W.