我想授权我在Active Directory服务器上的用户访问网络服务器。但是,我不希望将密码以明文形式发送到网络服务器。
我找到的所有解决方案都使用带有纯密码的 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只是一个例子,我的问题不是特定于语言的。
如果您知道LDAP后端的哈希算法,那么您可以在javascript中对密码进行哈希处理,并仅将其发送到服务器。这意味着您的LDAp身份验证脚本需要能够读取所有密码哈希,以便能够将它们与预哈希密码进行比较。
我认为这比通过TLS安全的HTTP连接(又名Https(将明文密码发送到服务器的风险更高,然后服务器也通过TLS安全(ldaps或starttls(使用默认绑定机制。
由于您没有使用绑定机制,因此现在还需要自己重建和维护所有可能实施的密码策略或锁定密码,这些密码策略或锁定密码很容易获得,并且由您的管理员实施和支持。