3

我需要根据 Active Directory 评估用户的密码过期时间。
我正在使用 Android 和 Unboundid sdk。我可以使用此代码成功连接到服务器

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);
  return null;              
}

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

BindRequest _bind_request = new SimpleBindRequest(_username, _password);
BindResult _bind_result = _ldap_connection.bind(_bind_request);

我使用搜索检索用户属性

Filter _filter = Filter.create("(userPrincipalName=lorenzoff)");
SearchRequest _search_request = new SearchRequest(_server._base_dn, SearchScope.SUB, _filter);

但是我怎样才能读取域的属性' maxPwdAge '?我可以在域属性中看到它...

在此处输入图像描述

我需要它来评估用户密码过期之前的剩余天数。

4

2 回答 2

4

我遇到了同样的问题并找到了解决方案。这个想法很简单,您必须访问基本 DN 并获取该属性:

SearchRequest _search_request = new SearchRequest(_server._base_dn, 
      SearchScope.BASE, "(objectClass=*)","maxPwdAge");

有了这个,你应该得到那个属性的结果,如果你得到了,SearchRequest.ALL_USER_ATTRIBUTES你将拥有屏幕截图上显示的所有属性。

该属性对所有用户都是通用的,接下来您需要做的是搜索您的特定用户,就像您在获取属性之前所做的pwdLastSet那样,因为您期望它具有用户最后一次更改密码的时间戳。

现在很简单,你需要找到用户最后一次更改它的到期日期,以及密码年龄

希望能帮助到你

于 2012-10-25T16:56:14.600 回答
0

如果maxPwdAge是“操作”属性,则必须在搜索请求中明确请求。返回“用户”属性(如果权限允许),但必须明确请求“操作”属性。要请求maxPwdAge创建您的请求,如下所示:

SearchRequest _search_request = new SearchRequest(_server._base_dn, 
      SearchScope.SUB, _filter,"maxPwdAge");

构造SeachRequest函数实际上也接受一个可变长度的属性类型列表:

SearchRequest _search_request = new SearchRequest(_server._base_dn, 
     SearchScope.SUB,_filter,"maxPwdAge","minPwdAge",
     SearchRequest.ALL_USER_ATTRIBUTES);

requests maxPwdAgeminPwdAge和所有其他用户属性。要请求所有操作属性,请使用SearchRequest.ALL_OPERATIONAL_ATTRIBUTES.

于 2012-07-05T21:50:34.147 回答