Uncategorized exception occured during LDAP processing; nested exception is javax.naming.NamingException(LDAP 处理期间发生未分类异常;嵌套异常是 javax.naming.NamingException)
问题描述
我正在尝试在 oauth2 中使用带有 Spring Boot 安全性的 LDAP 进行身份验证.我的配置如下所示
I am trying to authenticate using LDAP in oauth2 with spring boot security. My configuration is as given below
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
@EnableWebSecurity
public class LdapConfiguration extends WebSecurityConfigurerAdapter {
private static String url ="ldap://myldapdomain.com:389/OU=Users,OU=Accounts,DC=myldapdomain,DC=com";
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.disable()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.httpBasic();
}
@Configuration
protected static class AuthenticationConfiguration extends GlobalAuthenticationConfigurerAdapter {
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.userSearchFilter("(uid={0})")
.contextSource().url(url);
}
}
}
当我尝试登录 http://localhost:9000/api/oauth/带有所需 LDAP 用户名和密码的令牌 我收到以下异常
When I tried to login to http://localhost:9000/api/oauth/token with the required LDAP userid and password I am getting the following exception
{
"timestamp": 1508848799342,
"status": 401,
"error": "Unauthorized",
"message": "Uncategorized exception occured during LDAP processing; nested exception is javax.naming.NamingException: [LDAP: error code 1 - 000004DC: LdapErr: DSID-0C090749, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v2580u0000]; remaining name '/'",
"path": "/api/oauth/token"
}
谁能帮我解决这个问题
更新 1
我使用下面的代码 authenticateUser 函数创建了一个用于 LDAP 身份验证的 Java 独立应用程序.在那里我可以成功登录
I have created a java standalone application for LDAP authentication using the below code authenticateUser function. There I am able to login successfully
private String ldapURL = "ldap://myldapdomain:389";
private String ldapDomain = "myldapdomain.com";
public void authenticateUser(String username, String password) throws NamingException {
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.PROVIDER_URL, ldapURL);
env.put(Context.SECURITY_PRINCIPAL, username + "@" + ldapDomain);
env.put(Context.SECURITY_CREDENTIALS, password);
DirContext context = null;
try {
context = new InitialDirContext(env);
} catch (Exception e) {
if (context != null) {
context.close();
}
System.out.println("LDAP auth Failed:::"+ e.getMessage());
//throw new LoginFailedException("Invalid User Id orPassword");
}
}
推荐答案
您必须定义一个 managerDn 用于绑定到您的 LDAP.
You have to define a managerDn which is used to bind to your LDAP.
例如ldapAuthentication().contextSource().url(securityConfigProperties.getUrl()).port(securityConfigProperties.getPort()).managerDn(securityConfigProperties.getManagerDn()).managerPassword(securityConfigProperties.getManagerPassword())
这篇关于LDAP 处理期间发生未分类异常;嵌套异常是 javax.naming.NamingException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:LDAP 处理期间发生未分类异常;嵌套异常是 javax.naming.NamingException
基础教程推荐
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- 存储 20 位数字的数据类型 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- Struts2 URL 无法访问 2022-01-01
- 如何对 Java Hashmap 中的值求和 2022-01-01
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- RabbitMQ:消息保持“未确认"; 2022-01-01
