欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

用户姓名保护python_Python操作LDAP,对用户进行认证(验证用户名以及密码)

发布时间:2025/3/21 python 51 豆豆
生活随笔 收集整理的这篇文章主要介绍了 用户姓名保护python_Python操作LDAP,对用户进行认证(验证用户名以及密码) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Python操作LDAP,对用户进行认证

1、环境

Python版本: 3.7.1

操作系统:windows 7 x64

第三方包:python-ldap

2、LDAP

LDAP,它是基于X.500标准的轻量级目录访问协议,支持TCP/IP

目录是一个为查询,浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录。

目录数据库和关系数据库不用,它有优异的读性能,但写性能差,并没有事务处理,回滚等复杂功能,不适于存储修改频繁的数据,所以目录天生是用来查询。

3、基本模型

(1)目录树概念

目录树:在一个目录服务系统中,整个目录信息集都可以表示一个目录信息树,树中的每个节点是一个条目。

条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)

对象类:与某个实体类型对应的以中速属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。

属性:描述条目的某个方面信息,一个属性有一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。

(2)DC、UID、CN、SN、DN、RDN

dc:域名的部分,其格式是将完整的域名分成几部分,如域名为example.com变成dc=example,dc=com(一条记录的所属位置)

uid: 用户id

ou:组织单位,组织单位可以包含其他各种对象(包括其他组织单元)

cn: 公共名称

sn: 姓

dn:一条记录的位置,唯一

rdn: 相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分

4、代码实现

# 验证用户名以及密码是否正确(单点登录)

import ldap

AUTH_LDAP_SERVER_URI = "ldap://0.0.0.0:389" # ldap主机

AUTH_LDAP_BIND_DN = "cn=,ou=,dc=,dc=" # 根据自己实际需求填写

AUTH_LDAP_BIND_PASSWORD = "" # 管理账户密码

SEARCH_BASE = "OU=,DC=,DC="

def ldapAuth(username, password):

try:

# 建立连接

ldapconn = ldap.initialize(AUTH_LDAP_SERVER_URI)

# 绑定管理账户,用于用户的认证

ldapconn.simple_bind_s(AUTH_LDAP_BIND_DN, AUTH_LDAP_BIND_PASSWORD)

searchScope = ldap.SCOPE_SUBTREE # 指定搜索范围

searchFilter = "(sAMAccountName=%s)" % username # 指定搜索字段

ldap_result = ldapconn.search_s(SEARCH_BASE, searchScope, searchFilter, None) # 返回该用户的所有信息,类型列表

if ldap_result:

user_dn = ldap_result[0][0] # 获取用户的cn,ou,dc

try:

ldapconn.simple_bind_s(user_dn, password) # 对用户的密码进行验证

print("验证成功")

return True

except ldap.LDAPError as e:

print(e)

return False

else:

return False

except ldap.LDAPError as e:

print(e)

return False

# r = ldapconn.simple_bind_s(ldap_result[0]["distinguishedName"][0].decode("utf-8"), password) # 验证用户的账号和密码

# print(r)

# if ldap_result:

# print(ldap_result)

# result_data = ldapconn.result(ldap_result, 1) # 获取需要认证用户的dn

# print(result_data)

# if len(result_data):

# _, r_b = result_data[0]

# r = ldapconn.simple_bind_s(r_b["distinguishedName"][0].decode("utf-8"), password) # 验证用户的账号和密码

# print(r)

# else:

# return False

if __name__ == '__main__':

print(ldapAuth(用户名,密码))

总结

以上是生活随笔为你收集整理的用户姓名保护python_Python操作LDAP,对用户进行认证(验证用户名以及密码)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。