前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 连接AD域账户,实现用户名密码验证

Python 连接AD域账户,实现用户名密码验证

原创
作者头像
no怕不了木
发布2024-08-30 16:04:16
11601
代码可运行
发布2024-08-30 16:04:16
举报
文章被收录于专栏:未来码迹
运行总次数:1
代码可运行

说明:目前在做Python的Django项目,需要与公司的域做连接,进行账号的统一管理,故此有以下代码,给有需要的同仁,

可以用做用户验证

导入库

如没有ldap3库,则需要通过pip进行安装

代码语言:python
代码运行次数:0
复制
from ldap3 import Server, Connection, ALL, NTLM, SUBTREE
import random
import re

请替换server_address的值,如“ldap://192.168.1.2”,

替换domain的值如“ test.com”

还需要替换以下dc=test,替换为自己的,

代码语言:python
代码运行次数:0
复制
conn.search(search_base='dc=test,dc=com',
                    search_filter=f'(sAMAccountName={username})',
                    search_scope=SUBTREE,
                    attributes=['cn', 'mail'])

替换完成后,下面是全部代码

代码语言:python
代码运行次数:1
复制
#提取AD域用户信息,如果不需要可以做删除,这个在下方代码中有调用,
def get_info(adinfo):
    # 使用正则表达式提取
    result = re.search(r'OU=(.*?),', adinfo).group(1)
    return result

#验证用户名密码,
def authenticate_ad(username, password):

    server_address = "ldap://192.168.1.2"
    domain = "test.com"
    server = Server(server_address, get_info=ALL)

    user = f'{domain}\\{username}'

    conn = Connection(server, user=user, password=password, authentication=NTLM)
    if conn.bind():
        conn.search(search_base='dc=test,dc=com',
                    search_filter=f'(sAMAccountName={username})',
                    search_scope=SUBTREE,
                    attributes=['cn', 'mail'])

        if len(conn.entries) > 0:
            user_info = conn.entries[0]
            user_dn = user_info.entry_dn
            user_cn = user_info.cn.value
            user_mail = user_info.mail.value if user_info.mail else 'N/A'
            conn.unbind()
            return {'username': user_cn, 'email': user_mail,'dp':get_info(user_dn)}
        else:
            conn.unbind()
            return None
    else:
        return None
        
if __name__ == "__main__":
    username = input("用户名: ")
    password = input("密码: ")
    user_info = authenticate_ad(username, password)
    if user_info:
        print("验证成功,用户名密码正确")
        print(user_info)
        print(f"用户名: {user_info['username']}")
        print(f"邮件地址: {user_info['email']}")
    else:
        print("验证失败")

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档