代码之家  ›  专栏  ›  技术社区  ›  nowox

安全LDAP身份验证?

  •  0
  • nowox  · 技术社区  · 6 年前

    我想在活动目录服务器上验证我的用户以访问Web服务器。但是,我不希望密码被发送到Web服务器。

    我找到的所有解决方案都使用带有纯密码的post请求,例如以下示例:

    <?php
    
    // using ldap bind
    $ldaprdn  = 'uname';     // ldap rdn or dn
    $ldappass = 'password';  // associated password
    
    // connect to ldap server
    $ldapconn = ldap_connect("ldap.example.com")
        or die("Could not connect to LDAP server.");
    
    if ($ldapconn) {
    
        // binding to ldap server
        $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
    
        // verify binding
        if ($ldapbind) {
            echo "LDAP bind successful...";
        } else {
            echo "LDAP bind failed...";
        }
    
    }
    
    ?>
    

    有没有一种方法可以在客户端散列密码,然后将令牌发送到用于向LDAP服务器进行身份验证的后端?

    php只是一个例子,我的问题不是特定于语言的。

    1 回复  |  直到 6 年前
        1
  •  1
  •   heiglandreas    6 年前

    如果您知道LDAP后端的散列算法,那么您可能能够在JavaScript中散列密码并将其仅发送给服务器。这意味着,LDAP身份验证脚本需要能够读取所有的密码散列,以便将它们与预密码进行比较。

    我认为比通过TLS安全HTTP连接(AKA HTTPS)向服务器发送明文密码的风险更高,然后服务器也通过TLS安全(LDAP或SARTTLS)使用默认绑定机制。

    而且,由于您没有使用绑定机制,所有可能的密码策略或锁定密码的强制执行都很容易获得,并由您的目录管理员实现和支持,现在也需要您自己重建和维护。