无法使 Keycloak Tomcat 7 适配器工作(版本 3.4.3.Final)
Cannot get Keycloak Tomcat 7 adapter to work (version 3.4.3.Final)
我有一个 Spring Boot 1.5.2 Web 应用程序打包为 .war 托管在 Apache Tomcat 7.0.68.
我想使用 Keycloak Tomcat 适配器,但我在配置中包含的每个端点上都遇到 HTTP 401 returns...
我使用的是 3.4.3.Final 版本。
我已阅读文档 @ 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/
下提取
创建了一个 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,每个用户都有的角色)
结论: 每个端点上的 HTTP 200 除了 /customer/* 我得到 HTTP 401。
有趣的事情,在调试中,我检测到变量 account
总是在 CatalinaSessionTokenStore
的第 61 行 null
class(来自 Tomcat Keycloak 适配器依赖项):
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 适配器配置记录如此糟糕,几乎 non-existent...
我有一个 Spring Boot 1.5.2 Web 应用程序打包为 .war 托管在 Apache Tomcat 7.0.68.
我想使用 Keycloak Tomcat 适配器,但我在配置中包含的每个端点上都遇到 HTTP 401 returns... 我使用的是 3.4.3.Final 版本。
我已阅读文档 @ 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/
下提取
创建了一个
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,每个用户都有的角色)
结论: 每个端点上的 HTTP 200 除了 /customer/* 我得到 HTTP 401。
有趣的事情,在调试中,我检测到变量 account
总是在 CatalinaSessionTokenStore
的第 61 行 null
class(来自 Tomcat Keycloak 适配器依赖项):
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 适配器配置记录如此糟糕,几乎 non-existent...