【问题标题】:Spring Boot LDAP authentication over Tomcat (Pre-Authentication)通过 Tomcat 的 Spring Boot LDAP 身份验证(预身份验证)
【发布时间】:2017-07-30 13:07:01
【问题描述】:

我正在创建一个 Spring Boot 应用程序,它应该只能由 LDAP 中的用户访问。此应用程序应部署到 Tomcat 服务器(而不是嵌入式服务器)。 LDAP 的配置是在 Tomcat 本身中完成的:

<Realm className="org.apache.catalina.realm.LockOutRealm">
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
        resourceName="UserDatabase"/>
    <Realm className="org.apache.catalina.realm.JNDIRealm"
        connectionURL="ldap://someldapserver:389"
        userPattern="uid={0},dc=example,dc=com"
        roleBase="dc=example,dc=com"
        roleName="cn"
        roleSearch="(uniqueMember={0})"/>
</Realm>

如果我尝试访问 Tomcat 管理器,我可以使用 LDAP 凭据进行身份验证,因此连接基本上可以正常工作。

这是我的配置:

@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/test").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin().permitAll()
                .and()
            .logout().permitAll()
                .and()
            .csrf().disable();
    }
}

我知道我可以直接在应用程序中配置 LDAP 连接 (authenticationManagerBuilder.ldapAuthentication()...),但这不是我想要的。

我如何告诉 Spring Boot 使用来自 Tomcat 的 LDAP 身份验证来进行应用程序?

更新

看来我必须启用Pre-Authentication。这可以通过.and().jee().mappableRoles("ROLE_ADMIN") 完成。这似乎可行,但我仍然无法验证:No pre-authenticated principal found in request

我必须在 Tomcats 配置中添加一些东西吗?

【问题讨论】:

    标签: tomcat authentication spring-boot spring-security ldap


    【解决方案1】:

    我找不到任何合适的解决方案,所以我完全删除了 Spring Security 并将约束添加到 web.xml。使用context.xml 可以设置身份验证方法(例如,如果您希望切换到 tomcat-users.xml 身份验证,请参见下面的示例)。然后通过 Tomcat 进行身份验证。

    web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app>
        <security-constraint>
            <web-resource-collection>
                <web-resource-name>Authentication</web-resource-name>
                <url-pattern>/test/test</url-pattern>
            </web-resource-collection>
            <auth-constraint>
                <role-name>users</role-name>
            </auth-constraint>
        </security-constraint>
        <login-config>
            <auth-method>BASIC</auth-method>
        </login-config>
        <security-role>
            <role-name>users</role-name>
        </security-role>
    </web-app>
    

    context.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
    </Context>
    

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 2022-01-20
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      • 2020-09-08
      相关资源
      最近更新 更多