我有一个Spring Boot 1.5.2 Web App打包为.war,托管在Apache Tomcat 7.0.68上。
我想使用Keycloak Tomcat适配器,但是在配置中包含的每个端点上都遇到HTTP 401返回…我正在使用3.4.3。最终版本。
我已经阅读了文档@ http://www.keycloak.org/docs/2.5/securing_apps/topics/oidc/java/tomcat- adapter.html。
事实:
用户,组,角色,领域,客户端等位于Keycloak主配置中。
下载https://downloads.jboss.org/keycloak/3.4.3.Final/adapters/keycloak-oidc/keycloak-tomcat7-adapter-dist-3.4.3.Final.zip并解压缩<tomcat_folder>/lib/
<tomcat_folder>/lib/
使用创建了一个META-INF/context.xml文件:
META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?> <Context path="/my-app"> <Valve className="org.keycloak.adapters.tomcat.KeycloakAuthenticatorValve"/> </Context>
WEB-INF/keycloak.json
{ "realm" : "my_realm", "resource" : "my_client", "principal-attribute": "preferred_username", "truststore" : "/my_path/keycloak-truststore.jks", "ssl-required" : "external", "truststore-password" : "my_password", "credentials" : { "secret" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "auth-server-url" : "http://<keycloak_server>.fr:8443/auth" }
WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>my-app</display-name> <module-name>my-app</module-name> <login-config> <auth-method>BASIC</auth-method> <realm-name>my_realm</realm-name> </login-config> <security-constraint> <web-resource-collection> <url-pattern>/customer/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>uma_authorization</role-name> </auth-constraint> </security-constraint> <security-role> <role-name>uma_authorization</role-name> </security-role>
(使用uma_authorization进行的简单测试,每个用户都具有该角色)
结论: 除/ customer / *以外,每个端点上的HTTP 200均获得HTTP 401。
有趣的是 ,在调试中,我从类(从Tomcat Keycloak Adapter依赖项)中检测到该变量account始终null位于第61行CatalinaSessionTokenStore:
account
null
CatalinaSessionTokenStore
Session catalinaSession = request.getSessionInternal(false); if (catalinaSession == null) return; SerializableKeycloakAccount account = (SerializableKeycloakAccount) catalinaSession.getSession().getAttribute(SerializableKeycloakAccount.class.getName()); if (account == null) { return; } (... next lines are to control the content of the Keycloak context)
即使已激活TRACE级别,Tomcat日志中也没有任何内容。
我忘记配置了什么吗?是虫子吗?
谢谢
找到了。在我的keycloak.json中,从切换:
"auth-server-url" : "http://<keycloak_server>.fr:8443/auth"
至 :
"auth-server-url" : "https://<keycloak_server>.fr:8443/auth"
没有日志,没有错误…很遗憾,Keycloak适配器配置记录得很差,几乎没有日志记录…