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

min*_*rse 8 node.js cors express keycloak

我试图让nodeJS keycloak适配器与我的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.对预检请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头.原产地" 的http://本地主机:5001 "因此不允许访问.

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

我已经使用节点CORS库也使我的节点Express应用程序CORS,这明确指导下在这里

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

app.use(cors());
app.options('*', cors()); //enable for all pre-flight requests
Run Code Online (Sandbox Code Playgroud)

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

有没有人遇到类似问题并设法解决?我一直在挖掘许多JBOSS邮件列表线程和其他堆栈溢出,所有似乎都建议它就像在keycloak管理站点上为客户端的web origin ins config部分添加'*'条目一样简单,但事实并非如此我.

谢谢

小智 10

只需将您的应用程序的 url 像“ http://localhost:8081 ”放在 Keycloak 客户端设置的“Web Origins”字段中。


小智 8

我也在mindparse上致力于这个问题。

我认为这里的关键问题是,尽管密钥库服务器已在密钥库管理门户中正确配置了“ Web Origins”设置,但密钥库服务器没有响应任何ACCESS-CONTROL-ALLOW-ORIGIN标头。

该过程更深入的流程是:

  1. 用户尝试在节点快速服务器上调用密钥隐藏安全路由
  2. Keycloak中间件检测到用户未通过身份验证,并以302(重定向)响应请求到Keycloak服务器托管的自定义登录页面。
  3. 浏览器将OPTIONS请求发送到密钥斗篷服务器,以检查是否是因为它是跨源请求。
  4. 密钥公开服务器响应不包括ACCESS-CONTROL-ALLOW-ORIGIN标头,以告知浏览器它有权发出此请求。
  5. 然后,浏览器将读取此响应,因此不会发出后续请求,因为它未通过访问控制允许来源检查


Zer*_*lve 7

我有同样的问题。我正在使用 Keycloak 6.0.1

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

之后,我遇到了另一个问题:401 UNAUTHORIZED. 这个帖子解决了问题


Rob*_*rtG 6

是的,必须为配置的客户端正确设置 Web 起源,但它也有一些陷阱,因为“+”设置取决于其他值。

例如,我的本地测试配置错误:

Root URL: http://localhost:3000/
Valid redirect URIs: *
Web Origins: +
Run Code Online (Sandbox Code Playgroud)

...并且由于像您所描述的 CORS 问题而失败。

问题在于其他两个设置,因此这是正确的并且现在可以使用:

Root URL: http://localhost:3000
Valid redirect URIs: /*
Web Origins: +
Run Code Online (Sandbox Code Playgroud)

(KeyCloak UI 在很多方面都是一场可用性噩梦,在我看来,这只是一个陷阱)