usuario sesion saber politica masivo iniciar forzar dominio debe contraseñas contraseña como cambio cambiar antes administrador active android active-directory passwords unboundid-ldap-sdk

android - sesion - LDAP cambiando la contraseña del usuario en Active Directory



politica de cambio de contraseña active directory (2)

Declaro que soy un principiante completo de LDAP.
Debo permitir que un usuario cambie su propia contraseña a través de un dispositivo Android. El usuario NO tiene privilegios administrativos.
Utilizando el LDB SDK de UnboudId para Java, puedo vincularme al servidor y obtener la entrada del usuario usando este código:

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);

Esto funciona y obtengo 1 entrada y todos los atributos relativos. Ahora mi tarea es cambiar la contraseña [contraseña] con una nueva [nueva contraseña].
Mis intentos:

PasswordModifyExtendedRequest _password_modify_request = new PasswordModifyExtendedRequest([found entry DN], [password], [new password]); PasswordModifyExtendedResult _password_modify_result = (PasswordModifyExtendedResult)_ldap_connection.processExtendedOperation(_password_modify_request);

Esto no funciona debido a LDAPException

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��'')

Entonces he intentado

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

Esto no funciona debido a LDAPException

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

Finalmente, he intentado

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);

Esto no funciona debido a LDAPException

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) ��'')

Y ahora no tengo más ideas ... Cualquier ayuda será apreciada, gracias de antemano


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"));

Hizo el truco.


Finalmente, pude resolver el problema CONSTRAINT_ATT_TYPE en el cambio de contraseña. Establecí la edad mínima de la contraseña en 4 días, por lo que AD no me permitió actualizar la contraseña. AD arroja el error genérico CONSTRAINT_ATT_TYPE para todas esas violaciones. Después de establecer la edad mínima de la contraseña como 0 (Ninguno), todo funciona bien. El historial de contraseñas de AD también se actualiza.

Consulte: http://www.javaxt.com/Tutorials/Windows/How_to_Authenticate_Users_with_Active_Directory