简体   繁体   English

使用LDAP和spring LDAP API进行身份验证,而不使用spring安全性

[英]Authenticating using LDAP with spring LDAP API and without using spring security

I am using spring-ldap-core plugin in my Sprint boot application. 我在Sprint引导应用程序中使用spring-ldap-core插件。 Basically, the LDAPTemplate - http://docs.spring.io/spring-ldap/docs/current/apidocs/org/springframework/ldap/core/LdapTemplate.html 基本上,LDAPTemplate - http://docs.spring.io/spring-ldap/docs/current/apidocs/org/springframework/ldap/core/LdapTemplate.html

I basically want to convert the xml configuration below into java using Spring LDAP API and want to avoid using spring security. 我基本上想使用Spring LDAP API将下面的xml配置转换为java,并希望避免使用spring安全性。

The xml configuration that I want to convert is - 我要转换的xml配置是-

 <ldap-server id="ldapServer"
                 url="ldap://ad.company.com:389"
                 manager-dn="CN=serviceaccount,OU=Service Accounts,DC=ad,DC=company,DC=com"
                 manager-password="password"/>

    <authentication-manager>
        <ldap-authentication-provider
                server-ref="ldapServer"
                user-search-base="dc=ad,dc=company,dc=com"
                user-search-filter="sAMAccountName={0}"
                group-search-filter="member={0}"
                group-search-base="ou=Groups,dc=ad,dc=company,dc=com"
                group-role-attribute="cn"/>
    </authentication-manager>

Here is my java code below- 这是下面的我的Java代码-

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.core.support.LdapContextSource;
import org.springframework.ldap.authentication.DefaultValuesAuthenticationSourceDecorator;

@Configuration
public class LdapConfiguration {

    @Bean
    public LdapContextSource contextSource(){
        LdapContextSource contextSource = new LdapContextSource();

        contextSource.setUrl("ldap://ad.company.com:389");
        contextSource.setBase("DC=ad,DC=company,DC=com");
        contextSource.setUserDn("CN=serviceaccount,OU=Service Accounts,DC=ad,DC=company,DC=com");
        contextSource.setPassword("password");
        contextSource.afterPropertiesSet();
        return contextSource;
    }


    @Bean
    public LdapTemplate ldapTemplate(){

        LdapTemplate template = new LdapTemplate(contextSource());
        try {
            template.afterPropertiesSet();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return template;
    }
}

This is how I am trying to invoke authentication - The method that this snippet is a part of returns a boolean value if authentication happens 这就是我尝试调用身份验证的方式-如果发生身份验证,此代码段是其中一部分的方法将返回布尔值

 AndFilter filter = new AndFilter();

    filter.and(new EqualsFilter("sAMAccountName", userloginName));

    return ldapTemplate.authenticate("OU=Service Accounts", filter.encode(), userPassword);

This is not working and the error I get is that : 这不起作用,我得到的错误是:

No results found for search, base: 'OU=Service Accounts'; filter: '(sAMAccountName=usernameIinput)'.

I want to know how the following xml properties can be configured using LDAP API? 我想知道如何使用LDAP API配置以下xml属性?

group-search-filter="member={0}"
group-search-base="ou=Groups,dc=ad,dc=company,dc=com"
group-role-attribute="cn"/>

Also, what else am I missing? 另外,我还想念什么? Why is this not working? 为什么这不起作用? Any help will be really appreciated! 任何帮助将不胜感激!

I was able to figure this out. 我能够弄清楚这一点。

//LDAP connection using LDAPTemplate //使用LDAPTemplate进行LDAP连接

@Configuration
public class LdapConfiguration {

    @Bean
    public LdapContextSource contextSource(){
        LdapContextSource contextSource = new LdapContextSource();
        contextSource.setUrl("ldap://companyurl.com:389");
        contextSource.setUserDn("CN=serviceaccount,OU=Service Accounts,DC=ad,DC=company,DC=com");
        contextSource.setPassword("secretpassword");
        return contextSource;
    }

    @Bean
    public LdapTemplate ldapTemplate(){
        LdapTemplate template = new LdapTemplate(contextSource());
        return template;
    }
}

//Authentication portion //验证部分

AndFilter filter = new AndFilter();
filter.and(new EqualsFilter("mailNickname", username));

Boolean authenticate = ldapTemplate.authenticate(base, filter.encode(), userpassword);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM