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”?我可以看到它之中域的属性...
我需要它,直到用户口令过期评估剩下的日子。
答
如果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);
请求maxPwdAge
,minPwdAge
,和所有其他的用户属性。要请求所有操作属性,请使用SearchRequest.ALL_OPERATIONAL_ATTRIBUTES
。
答
我有同样的问题,并找到了解决方案。这个想法很简单,你必须访问基DN并获得该属性:
SearchRequest _search_request = new SearchRequest(_server._base_dn,
SearchScope.BASE, "(objectClass=*)","maxPwdAge");
这个你应该得到的结果与属性,如果你得到SearchRequest.ALL_USER_ATTRIBUTES
你将有你的屏幕截图中显示的所有属性。
该属性对于所有用户都很常用,接下来您需要做的是在获取属性pwdLastSet
之前按照自己的方式搜索特定用户,因为您期望它具有上次用户的时间戳改变了他的密码。
现在很简单,你需要找到的最后一个时间的截止日期用户更改,密码年龄
希望它有助于
嗨特里,感谢您的回复。我尝试了所有建议,但都没有成功。使用'第一个',它会返回一个没有任何属性的条目(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
如上所述,我看到maxPwdAge和minPwdAge检查域属性,而不是单个用户。告诉'检查',我打算通过Windows GUI查看域的属性,仅此而已。所以问题是:拥有一个有效的LDAPConnection,我如何获得整个域的属性而不是单个用户?换句话说,我怎么能有相对于域的SerchResultEntry? – lorenzoff 2012-07-05 22:35:47