重定向到登录时的Keycloak CORS问题

时间:2017-09-14 13:32:26

标签: node.js express cors keycloak

我正在尝试让nodeJS keycloak adapter使用我的Express应用程序,但在尝试重定向到我使用keycloak中间件保护的路由的登录页面时遇到了CORS问题:

  

XMLHttpRequest无法加载   http://192.168.132.44:8080/auth/realms/Actora/protocol/openid-connect/auth?client_id=actora-test&state=0e9c9778-c41b-4aa8-8052-d0f0125045ac&redirect_uri=http%3A%2F%2Flocalhost%3A5001%2Fauth%2Fchecktoken%3Fauth_callback%3D1&scope=openid&response_type=code。   对预检请求的响应没有通过访问控制检查:否   '访问控制允许来源'标题出现在请求的上   资源。起源' http://localhost:5001'因此是不允许的   访问。

在我的keycloak客户端设置中,我添加了单个值' *'到Web Origins配置部分。

我还使用节点cors库在我的节点表达应用程序上启用了cors,遵循此快速指南here

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

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

我使用版本3.2.1的keycloak以防万一(我看到新版本作为RC)

是否有人遇到类似问题并设法解决?我一直在挖掘许多JBOSS邮件列表线程和其他堆栈溢出,似乎所有人都建议它像添加' *'一样简单。在keycloak管理网站上输入客户端的网络起源配置部分,但对我来说情况并非如此。

由于

4 个答案:

答案 0 :(得分:6)

我也在使用mindparse处理这个问题。

我认为这里的关键问题是keycloak服务器没有响应任何ACCESS-CONTROL-ALLOW-ORIGIN标题,尽管他已经正确配置了" web Origins"在keycloak管理门户中设置。

更深入的流程是:

  1. 用户尝试在节点快速服务器上调用keycloak安全路由
  2. Keycloak中间件检测到用户未经过身份验证 使用302(重定向)对托管的自定义登录页面响应请求 通过keycloak服务器。
  3. 浏览器向keycloak服务器发送OPTIONS请求以检查它是否是 因为它是一个交叉来源请求。
  4. keycloak服务器响应不包括ACCESS-CONTROL-ALLOW- ORIGIN标题告诉浏览器它有权使这个 请求。
  5. 然后浏览器会读取此响应,因此不会执行此操作 up请求,因为它没有通过访问控制允许原始检查

答案 1 :(得分:0)

我有完全相同的问题。我正在使用Keycloak 6.0.1

就我而言,我必须在Java后端服务器的"enable-cors": true中添加keycloak.json

此后,我还有另一个问题:401 UNAUTHORIZEDenter image description here解决了这个问题

答案 2 :(得分:0)

只需将您的应用程序的网址(例如“ http://localhost:8081”放在Keycloak客户端设置的“ Web Origins”字段中即可。

答案 3 :(得分:0)

我在尝试连接到 KeyCloak 时也遇到了 CORS 问题,即使我已经正确填写了“Web Origins”网址。

结果我不小心连接到了错误的应用程序(客户端)和租户(领域),因此没有通过 CORS 检查。指向正确的应用程序和租户解决了我的问题。