401

时间:2017-12-17 22:18:01

标签: keycloak

我有两个keycloack客户端,

  • Angular 4:使用访问类型凭据身份验证
  • JAX RS应用程序(将成为资源服务器):具有仅承载身份验证!在这个客户端中,我们激活CORS,如下面的json所示。

{
  "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标头?

1 个答案:

答案 0 :(得分:1)

据我所知,Keycloak阀门仅在通过Keycloak身份验证服务器签入后才发送CORS标头。这意味着客户端或服务器端的任何网络或配置故障都会导致盲目的CORS故障,其中不包含任何错误详细信息。

Keycloak Tomcat阀确实可以提供几乎所有故障的详细故障信息。但是,它埋在HTTP标头中。这是一个问题,因为在发生CORS故障时,会自动禁止大多数标头。由于任何配置错误(例如:auth-server-url具有错误的端口)也会触发CORS故障,因此您永远不会获得标头,而只是无休止的CORS故障。

要查看该错误,您可以临时破解CORS标头,以便允许该错误标头。 (您以后必须删除它们,因为重复的CORS标头也是非法的。:/)我使用了tomcat CorsFilter过滤器,并对引用,方法和所有标头模式使用了“ *”,以允许所有内容。这使我可以看到“域不匹配”消息,并且几分钟后它就开始工作了。 (在此之前的两天痛苦的调试。)

祝你好运。

请注意401身份验证失败。 Keycloak也喜欢为401提供配置错误服务,这对我来说似乎是个错误。