[英]Adding a user with a password in Active Directory LDAP
這是我第一次使用StackOverflow,希望我能在這里得到一些回應。 我正在使用Windows Active Directory 2008使用spring-ldap api從Java存儲新用戶
我的問題是我無法使用密碼添加用戶。 我在AD某處讀到要設置密碼,應該使用unicodePwd
屬性。 來源: http : //geekswithblogs.net/lance/archive/2005/08/19/LdapAuthenticationASP.aspx
public void insertContact(ContactDTO contactDTO) {
try{
Attributes personAttributes = new BasicAttributes();
BasicAttribute personBasicAttribute = new BasicAttribute("objectclass");
personBasicAttribute.add("person");
personBasicAttribute.add("user");
personAttributes.put(personBasicAttribute);
personAttributes.put("givenName", contactDTO.getCommonName());
personAttributes.put("cn", contactDTO.getCommonName());
personAttributes.put("sn", contactDTO.getLastName());
personAttributes.put("description", contactDTO.getDescription());
personAttributes.put("unicodePwd",
this.createUnicodePassword(contactDTO.getPassword()) );
personAttributes.put("userPrincipalName", contactDTO.getUserLoginName());
personAttributes.put("sAMAccountName", contactDTO.getsAMAccountName());
personAttributes.put("displayname", contactDTO.getDisplayname());
// personAttributes.put( "pwdLastSet", "0" );
// personAttributes.put( "LockOutTime", "0" );
personAttributes.put("userAccountControl", "544");
BasicAttribute roomAttribute = new BasicAttribute("roomNumber");
for(String r : contactDTO.getRoomNumber())
{
roomAttribute.add(r);
}
personAttributes.put(roomAttribute);
DistinguishedName newContactDN = new DistinguishedName();
newContactDN.add("cn", contactDTO.getCommonName());
ldapTemplate.bind(newContactDN, null, personAttributes);
}
public byte[] createUnicodePassword(String password){
return toUnicodeBytes(doubleQuoteString(password));
}
private byte[] toUnicodeBytes(String str){
byte[] unicodeBytes = null;
try{
byte[] unicodeBytesWithQuotes = str.getBytes("Unicode");
unicodeBytes = new byte[unicodeBytesWithQuotes.length - 2];
System.arraycopy(unicodeBytesWithQuotes, 2, unicodeBytes, 0,
unicodeBytesWithQuotes.length - 2);
} catch(UnsupportedEncodingException e){
// This should never happen.
e.printStackTrace();
}
return unicodeBytes;
}
private String doubleQuoteString(String str){
StringBuffer sb = new StringBuffer();
sb.append("\"");
sb.append(str);
sb.append("\"");
return sb.toString();
}
但是它給了我錯誤代碼53
enter code here: org.springframework.ldap.UncategorizedLdapException: Operation failed; nested exception is javax.naming.OperationNotSupportedException: [LDAP: error code 53 - 0000001F: SvcErr: DSID-031A11E5, problem 5003 (WILL_NOT_PERFORM), data 0
我不知道如何在AD中設置用戶密碼。 我還閱讀了一些設置unicodePwd的地方,如果需要的話,我們需要SSL而不是我怎么做。 有沒有解決此問題的替代方法,請幫助我
是的,WILL_NOT_PERFORM錯誤是AD告訴您需要使用SSL連接來設置密碼。
要建立SSL連接,您需要使用如下所示的URL: ldaps://your.ldap.server:636
(請注意“ ldaps”)。 如果收到證書驗證錯誤,則需要使用“ keytool”將AD服務器的證書導入到Java密鑰庫中,以便Java應用程序將證書識別為有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.