2012-06-24 6 views
1

나는 LDAP에 대한 완전한 초보자라고 설명합니다.
사용자가 Android 기기를 통해 비밀번호를 변경하도록해야합니다. 사용자에게는 관리자 권한이 없습니다. 사용
의 I이 코드를 사용하여 사용자 항목 서버에 결합하여 얻을 수 있어요 자바 UnboudId LDAP SDK :LDAP가 Active Directory에서 사용자 암호를 변경하는 중

final SocketFactory _socket_factory; 
final SSLUtil _ssl_util = new SSLUtil(new TrustAllTrustManager()); 
try {    
    _socket_factory = _ssl_util.createSSLSocketFactory();    
} 
catch (Exception e) { 
    Log.e(LOG_TAG, "*** Unable to initialize ssl", e); 
} 

LDAPConnectionOptions _ldap_connection_options = new LDAPConnectionOptions(); 
_ldap_connection_options.setAutoReconnect(true); 
_ldap_connection_options.setConnectTimeoutMillis(30000); 
_ldap_connection_options.setFollowReferrals(false); 
_ldap_connection_options.setMaxMessageSize(1024*1024); 

LDAPConnection _ldap_connection = new LDAPConnection(_socket_factory, _ldap_connection_options, [host ip], 636, [username], [password]); 

Filter _filter = Filter.create("(userPrincipalName=" + [username] + ")"); 
SearchRequest _search_request = new SearchRequest([base DN], SearchScope.SUB, _filter); 
_search_request.setSizeLimit(1000); 
_search_request.setTimeLimitSeconds(30);    

SearchResult _search_result = _connection.search(_search_request); 

이 작동 내가 1 개 항목 및 모든 관련 특성을 얻을 수있다. 이제 내 작업은 새로운 [새 암호]로 암호 [암호]를 변경하는 것입니다.
내 시도 :

이 때문에 내가 인해 LDAP 예외

final Modification _replace_modification = new Modification(ModificationType.REPLACE, "unicodePwd", _get_quoted_string_bytes([new password])); 
LDAPResult _result = _connection.modify([found entry DN], _replace_modification);   

이 작동하지 않습니다 tryed했습니다

LDAPException(resultCode=2 (protocol error), errorMessage='0000203D: LdapErr: DSID-0C090C7D, comment: Unknown extended request OID, data 0, vece��', diagnosticMessage='0000203D: LdapErr: DSID-0C090C7D, comment: Unknown extended request OID, data 0, vece��') 

그런 다음 LDAP 예외로 작동하지 않습니다

LDAPException(resultCode=50 (insufficient access rights), errorMessage='00000005: SecErr: DSID-031A0F44, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0) 

가 마지막으로 나는이 때문에 LDAP 예외

LDAPException(resultCode=19 (constraint violation), errorMessage='00000005: AtrErr: DSID-03190F00, #1:0: 00000005: DSID-03190F00, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 9005a (unicodePwd)��', diagnosticMessage='00000005: AtrErr: DSID-03190F00, #1: 0: 00000005: DSID-03190F00, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 9005a (unicodePwd) ��') 

지금은 더 이상 아이디어가 없습니다에 작동하지 않습니다

final Modification _delete_old_modification = new Modification(ModificationType.DELETE, "unicodePwd", _get_quoted_string_bytes([password])); 
final Modification _add_new_modification = new Modification(ModificationType.ADD, "unicodePwd", _get_quoted_string_bytes([new password])); 
final ArrayList<Modification> _modifications = new ArrayList<Modification>(); 
_modifications.add(_delete_old_modification); 
_modifications.add(_add_new_modification); 
LDAPResult _result = _connection.modify([found entry DN], _modifications); 

을 tryed했습니다 ... 어떤 도움 사전

에 감사를 이해할 수있을 것이다

답변

2
final Modification _delete_old_modification = new Modification(ModificationType.DELETE, "unicodePwd", ('"' + oldPassword + '"').getBytes("UTF-16LE")); 
final Modification _add_new_modification = new Modification(ModificationType.ADD, "unicodePwd", ('"' + newPassword + '"').getBytes("UTF-16LE")); 

트릭을 했습니까?

0

마지막으로 암호 변경시 CONSTRAINT_ATT_TYPE 문제를 해결할 수있었습니다. 최소 암호 사용 기간을 4 일로 설정 했으므로 AD에서 암호를 업데이트 할 수 없습니다. AD는 이러한 모든 위반에 대해 일반 오류 CONSTRAINT_ATT_TYPE을 발생시킵니다. 최소 암호 사용 기간을 0 (없음)으로 설정하면 모든 것이 정상적으로 작동합니다. AD 암호 기록도 업데이트됩니다.

참조 : http://www.javaxt.com/Tutorials/Windows/How_to_Authenticate_Users_with_Active_Directory

관련 문제