一尘不染

无法使Keycloak Tomcat 7适配器正常工作(版本3.4.3)

tomcat

我有一个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。

事实:

        <?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

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日志中也没有任何内容。

我忘记配置了什么吗?是虫子吗?

谢谢


阅读 328

收藏
2020-06-16

共1个答案

一尘不染

找到了。在我的keycloak.json中,从切换:

"auth-server-url" : "http://<keycloak_server>.fr:8443/auth"

至 :

"auth-server-url" : "https://<keycloak_server>.fr:8443/auth"

没有日志,没有错误…很遗憾,Keycloak适配器配置记录得很差,几乎没有日志记录…

2020-06-16