我对 Java/Spring 很陌生。如果需要更多信息,请随时指出。
首先,我在 Javascript(nodejs) 中测试了以下代码,这些代码工作正常。
var ldap = require('ldapjs');
var client = ldap.createClient({
url: 'ldap://xx.xx.xx.xx:389'
});
client.bind('domain\\user1', 'user1_password', function (err) {
if (err) {
throw err;
return
}
var opts = {
filter: '(sAMAccountName=user2)',
scope: 'sub',
attributes: ['l', 'sn', 'cn', 'mail', 'displayName', 'postalCode', 'physicalDeliveryOfficeName', 'telephoneNumber' ]
};
client.search('dc=aaa,dc=bbb,dc=ccc', opts, function(err, res) {
res.on('searchEntry', function(entry) {
Object.entries(entry.object).forEach(([key, value]) => {
console.log('Found Attribute: ', key, '; value:', value)
})
});
});
然后按照本指南:
http://forum.spring.io/forum/spring-projects/security/110491-how-to-modify-authority-after-loading-it-from-ldap
但它失败了。
如果提交(http-post)一个表单(用户名使用域\用户名)username=domain%5Cuser1&password=user1_password&submit=Login
,它返回Reason: Bad credentials
如果提交(http-post)一个表单(用户名不包含域)username=user1&password=user1_password&submit=Login
,则返回500 错误:
org.springframework.ldap.NameNotFoundException:[LDAP:错误代码 32 - 0000208D:NameErr:DSID-031001E5,问题 2001(NO_OBJECT),数据 0,最佳匹配:''];嵌套异常是 javax.naming.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-031001E5, question 2001 (NO_OBJECT), data 0, best match of: '' ]; 剩下的名字''
对于第一种情况,条目似乎存在但未能验证密码。所以返回错误的凭据。
对于第二种情况,错误似乎表明搜索过滤器错误(正如CAS AD LDAP 32 错误指出的那样)
但我确定我输入了正确的用户名和密码,并且搜索过滤器与 nodejs 中已经测试过的相同。
已经被这个问题困扰了很长时间,但找不到一个解决方案。
感谢任何建议和解决方案。
注意:我在 class= 的入口处设置了断点com.my.own.util.CustomUserDetailsMapper
,但是一直没有触发,所以没有附上它的代码。
皈依舞
相关分类