【问题标题】:How to authenticate LDAP properly?如何正确验证 LDAP?
【发布时间】:2018-06-23 05:42:19
【问题描述】:

我正在处理一个必须使用 LDAP 身份验证的项目。在添加到我的 Flask 应用程序之前,我在 Stack Overflow 上找到 link 进行练习后,正在使用 ldap.forumsys.com 的服务器。

如果我在我的 python 代码中运行 ldapsearch bash 命令,我会得到一大堆用户名(特斯拉等)及其相关数据(虽然没有密码哈希)。我可以提取用户名/用户数据,如下所示:

username = request.form['username']
password = request.form['password']
cmd = "ldapsearch -h ldap.forumsys.com -D cn=read-only-admin,dc=example,dc=com -w" + os.environ['LDAP_PWD'] + " -b dc=example,dc=com"
ldap_query = os.popen(cmd).read()
user_str = re.sub("\n", "", ldap_query)
users = user_str.split("#")
user_data = ""
for line in users:
    if username in line:
        user_data = line
        break

但后来我意识到我的 LDAP 和数据库不一样。我希望找到可以用来验证用户登录信息的密码哈希。

然后我尝试了 python-ldap3 模块:

>>> conn = Connection(server, 'uid=tesla,dc=example,dc=com', 'password', auto_bind=True)
>>> conn.bound
True
>>> conn.entries
[]

不幸的是,在调用 conn.entries 后,我似乎无法在列表中返回任何数据。

我可以看到 ldap3 模块绑定了连接。 ldapsearch 命令是否也绑定?如果没有密码哈希,我应该如何验证客户端用户输入的用户名/密码?

非常感谢大家。

【问题讨论】:

  • 您不需要提取密码或其哈希值。您只需要尝试以该用户身份绑定即可。如果成功,则用户名和密码正确。
  • 那么如果conn.bound结果为true,就可以认证了?感谢您的输入
  • 如果结果为真,您已经通过了身份验证。
  • 好的。我想我感到困惑的是,通常使用管理员密码登录数据库。该 LDAP 服务器的密码( 'password' )实际上是我想的任何用户的密码。网站上有点不清楚。但是,如果“密码”是个人用户的密码,那么这很有意义。谢谢

标签: python-3.x authentication ldap python-ldap ldapauth


【解决方案1】:

如果语句...

conn.bound == True

那么连接已经通过LDAP认证了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    相关资源
    最近更新 更多