2

我正在使用 unboundid 原语通过以下代码对来自 Active Directory 上的 android 应用程序的用户进行身份验证:

public boolean getConnection() {
    LDAPConnection connection = new LDAPConnection();
    try {
        connection.connect("my.ldap.com", 389);
        SearchResult searchResult = connection.search("XXX",SearchScope.SUB, "(uid="+username+")");
        if(searchResult.getEntryCount() != 1) {
            return false;
        }
        else {
            String dn = searchResult.getSearchEntries().get(0).getDN();

            try {
                connection = new LDAPConnection("XXX", 389, dn, password);
                return true;
            }
            catch (LDAPException e) {
                return false;
            }
        }
    } catch (LDAPException e) {
        e.printStackTrace();
    }
    return true;
}

我的问题是:既然密码在那个函数中是清晰可读的,你知道它是否以及如何被加密以“发送”到 LDAP 以与 AD 中的密码进行比较?

4

1 回答 1

2

一个简单的绑定请求,就像您正在使用的那样,不会做任何事情来保护密码。为了确保它不会暴露给可能能够观察到客户端和服务器之间通信的任何人,您应该使用 SSL 或 StartTLS 之类的东西来保护该通信。

还有其他身份验证机制(例如我相信 Active Directory 支持的 DIGEST-MD5 SASL 机制)即使通过未加密的连接也可以保护密码。不幸的是,在 Android 上使用这些身份验证机制并不容易,因为 Android API 不包含必要的 SASL 支持。

于 2013-03-22T16:48:32.603 回答