繁体   English   中英

使用ldap3 python进行Active Directory身份验证,如何避免明文密码

[英]Active Directory authentication using ldap3 python, how to avoid clear text password

我知道以下问题已被多次询问,我可以找到的答案是获得SSL证书。

但是如何在没有SSL的情况下解决呢?

这是问题所在:

我一直在实现基于Rest的API,该API使用Active Directory对用户进行身份验证。

我们的安全团队担心将纯文本密码从UI传递到API存在安全风险。

但是我们这样做是因为Active Directory需要纯文本形式的密码。 它只是在POST请求中采用JSON格式:

{"user":"uname","password":"password"}

这是我从python ldap3模块使用的AD身份验证代码。

    s = Server(AD_SERVER, port=AD_PORT, use_ssl=True, get_info=ALL)
    c = Connection(s, user=userName, password=password, authentication=NTLM)
    c.bind()

因此,以上提供了一种以任何哈希或任何加密格式发送密码的方法。 我不确定Active Directory或ldap3是否支持这种连接机制。

任何线索将不胜感激。

LDAP(或python ldap3软件包)支持多种身份验证(绑定)方案。 一些用户或多或少以明文形式将用户密码传输到服务器,而其他用户(例如NTLM)使用密码术(以证明客户端代表用户,而没有将密码传输到服务器,例如仅传输卷积的密码哈希)并由服务器向客户端发出独特的挑战)。

问题是ldap3尝试实现自己的质询响应计算。 (这要求密码可用于python,并且不安全且不便。)相反,它应该利用SSP接口,即将服务器的质询传递给客户端的操作系统,并让OS计算发送给服务器的响应。 操作系统将使用用户登录时的凭据,并且不会将密码公开给python。

同样,服务器应用程序不应尝试验证响应本身,而应服从服务器的操作系统,该操作系统将质询/响应转发到域控制器,并返回是否签出。

一些编码将是必要的,但这里是蟒蛇NTLM SSPI(适用于HTTP,而不是LDAP)的例子,也有一些演示在pywin32事实上的标准库。

但是,在Windows域上执行宁静应用程序的正确方法可能是忘记ldap。 而是尝试在您的Web服务器上启用集成Windows身份验证,或尝试使用flask-Kerberos或PyAuthenNTLM2之类的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM