我有两个keycloack客户端,
{
"realm": "demo-realm",
"bearer-only": true,
"auth-server-url": "http://demo-keycloack-server:8080/auth",
"ssl-required": "external",
"resource": "demo-server",
"enable-cors": true
}
问题是JAX-RS应用程序的状态码为401(未授权)的HTTP响应没有将所需的CORS标头带到javascript客户端!
当HTTP状态为401时,我们如何添加相应的CORS标头?
答案 0 :(得分:1)
据我所知,Keycloak阀门仅在通过Keycloak身份验证服务器签入后才发送CORS标头。这意味着客户端或服务器端的任何网络或配置故障都会导致盲目的CORS故障,其中不包含任何错误详细信息。
Keycloak Tomcat阀确实可以提供几乎所有故障的详细故障信息。但是,它埋在HTTP标头中。这是一个问题,因为在发生CORS故障时,会自动禁止大多数标头。由于任何配置错误(例如:auth-server-url具有错误的端口)也会触发CORS故障,因此您永远不会获得标头,而只是无休止的CORS故障。
要查看该错误,您可以临时破解CORS标头,以便允许该错误标头。 (您以后必须删除它们,因为重复的CORS标头也是非法的。:/)我使用了tomcat CorsFilter过滤器,并对引用,方法和所有标头模式使用了“ *”,以允许所有内容。这使我可以看到“域不匹配”消息,并且几分钟后它就开始工作了。 (在此之前的两天痛苦的调试。)
祝你好运。
请注意401身份验证失败。 Keycloak也喜欢为401提供配置错误服务,这对我来说似乎是个错误。