Unboundid LDAP域属性

问题描述:

我需要根据Active Directory评估用户的密码过期时间。
我使用Android和Unboundid sdk。我可以使用此代码Unboundid LDAP域属性

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

成功连接到服务器我retreive用户属性使用搜索

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

但如何我可以读取域的属性“maxPwdAge”?我可以看到它之中域的属性...

enter image description here

我需要它,直到用户口令过期评估剩下的日子。

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

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

+0

嗨特里,感谢您的回复。我尝试了所有建议,但都没有成功。使用'第一个',它会返回一个没有任何属性的条目(SearchResultEntry(dn ='CN = OlissoApp,OU = Utenti IT-Lab,DC = IT-Lab,DC = local',messageID = 2,attributes = {})控制= {})),使用'第二'它返回到我现在看到相同的属性数组,但没有'maxPwdAge'属性。请求ALL_OPERATIONAL_ATTRIBUTES它返回一个空的属性列表多一个... – lorenzoff 2012-07-05 22:17:57

+0

如上所述,我看到maxPwdAge和minPwdAge检查域属性,而不是单个用户。告诉'检查',我打算通过Windows GUI查看域的属性,仅此而已。所以问题是:拥有一个有效的LDAPConnection,我如何获得整个域的属性而不是单个用户?换句话说,我怎么能有相对于域的SerchResultEntry? – lorenzoff 2012-07-05 22:35:47

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

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

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

该属性对于所有用户都很常用,接下来您需要做的是在获取属性pwdLastSet之前按照自己的方式搜索特定用户,因为您期望它具有上次用户的时间戳改变了他的密码。

现在很简单,你需要找到的最后一个时间的截止日期用户更改,密码年龄

希望它有助于