AD域对接

AD
AD(Active Directory,活动目录)是面向Windows Standard Server、Windows Enterprise Server以及 Windows Datacenter Server的目录服务。Active Directory存储了有关网络对象的信息,并且让管理员和用户能够轻松地查找和使用这些信息。Active Directory使用了一种结构化的数据存储方式,并以此作为基础对目录信息进行合乎逻辑的分层组织。
LDAP
LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol。
目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。
目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。
LDAP目录服务是由目录数据库和一套访问协议组成的系统。
LDAP是开放的Internet标准,支持跨平台的Internet协议,在业界中得到广泛认可的,并且市场上或者开源社区上的大多产品都加入了对LDAP的支持,因此对于这类系统,不需单独定制,只需要通过LDAP做简单的配置就可以与服务器做认证交互。“简单粗暴”,可以大大降低重复开发和对接的成本。
统一身份认证主要是改变原有的认证策略,使需要认证的软件都通过LDAP进行认证,在统一身份认证之后,用户的所有信息都存储在AD Server中。终端用户在需要使用公司内部服务的时候,都需要通过AD服务器的认证。
AD域对接_第1张图片
https://www.cnblogs.com/wilburxu/p/9174353.html做了详细介绍
LDAP目录用对象类型(objectclass)的概念来定义运行哪一类的对象使用什么属性。
条目中的记录通过objectclass实现分类,objectClass是一个继承性的类定义,每一个类定义指定必须具备的属性。如某一条目指定必须符合某个类型,则它必须具备超类所指定的属性。
通过objectclass分类,分散的条目中的记录就实际上建立了一个索引结构,为高速的读查询打下了基础。Objectclass也是过滤器的主要查询对象。
使用ldap3库
ldap3是一个严格符合RFC4510的纯Python LDAP 3客户端库,并在LGPL v3开源许可下发布。RFC4510是来自IETF的当前LDAP规范(2006年6月),并且废弃了先前的LDAP RFC 2251,2830,3771(1997年12月)。
ldap3可以与从2.6开始的任何Python版本一起使用,包括所有Python 3版本。它也适用于PyPy和PyPy3。
LdapBrowser-6.10.x-win-x86-Setup.msi目录可视化工具,如图
AD域对接_第2张图片
注意:
1、没有测试环境,客户提供基准DN
2、结合实际需求进行数据校验;
3、编号字段存在重复;
4、人员禁用标志(相当于离职或删除)

def isDisable(userAccContr):
if userAccContr & 2> 0:
return 1
else:
return 0
offduty = isDisable(int(str(ademp.UserAccountControl)))
或者
def isDisable(userAccContr):
if userAccContr >= 16777216: # TRUSTED_TO_AUTH_FOR_DELEGATION - 允许该帐户进行委派
userAccContr = userAccContr - 16777216
if userAccContr >= 8388608: # PASSWORD_EXPIRED - (Windows 2000 / Windows Server 2003) 用户的密码已过期
userAccContr = userAccContr - 8388608
if userAccContr >= 4194304:#// DONT_REQ_PREAUTH
userAccContr = userAccContr - 4194304
if userAccContr >= 2097152:#// USE_DES_KEY_ONLY - (Windows 2000 / Windows Server 2003) 将此用户限制为仅使用数据加密标准 (DES) 加密类型的密钥
userAccContr = userAccContr - 2097152
if userAccContr >= 1048576:# // NOT_DELEGATED - 设置此标志后,即使将服务帐户设置为信任其进行 Kerberos 委派,也不会将用户的安全上下文委派给该服务
userAccContr = userAccContr - 1048576
if userAccContr >= 524288:#// TRUSTED_FOR_DELEGATION - 设置此标志后,将信任运行服务的服务帐户(用户或计算机帐户)进行 Kerberos 委派。任何此类服务都可模拟请求该服务的客户端。若要允许服务进行 Kerberos 委派,必须在服务帐户的 userAccountControl 属性上设置此标志
userAccContr = userAccContr - 524288
if userAccContr >= 262144:#// SMARTCARD_REQUIRED - 设置此标志后,将强制用户使用智能卡登录
userAccContr = userAccContr - 262144
if userAccContr >= 131072:#// MNS_LOGON_ACCOUNT - 这是 MNS 登录帐户
userAccContr = userAccContr - 131072
if userAccContr >= 65536:#// DONT_EXPIRE_PASSWORD-密码永不过期
userAccContr = userAccContr - 65536
if userAccContr >= 2097152:#// MNS_LOGON_ACCOUNT - 这是 MNS 登录帐户
userAccContr = userAccContr - 2097152
if userAccContr >= 8192:# // SERVER_TRUST_ACCOUNT - 这是属于该域的域控制器的计算机帐户
userAccContr = userAccContr - 8192
if userAccContr >= 4096:# // WORKSTATION_TRUST_ACCOUNT - 这是运行 Microsoft Windows NT 4.0 Workstation、Microsoft Windows NT 4.0 Server、Microsoft Windows 2000 Professional 或 Windows 2000 Server 并且属于该域的计算机的计算机帐户
userAccContr = userAccContr - 4096
if userAccContr >= 2048:#// INTERDOMAIN_TRUST_ACCOUNT - 对于信任其他域的系统域,此属性允许信任该系统域的帐户
userAccContr = userAccContr - 2048
if userAccContr >= 512:# // NORMAL_ACCOUNT - 这是表示典型用户的默认帐户类型
userAccContr = userAccContr - 512
if userAccContr >= 256:#// TEMP_DUPLICATE_ACCOUNT - 此帐户属于其主帐户位于另一个域中的用户。此帐户为用户提供访问该域的权限,但不提供访问信任该域的任何域的权限。有时将这种帐户称为“本地用户帐户”
userAccContr = userAccContr - 256
if userAccContr >= 128:# // ENCRYPTED_TEXT_PASSWORD_ALLOWED - 用户可以发送加密的密码
userAccContr = userAccContr - 128
if userAccContr >= 64:# // PASSWD_CANT_CHANGE - 用户不能更改密码。可以读取此标志,但不能直接设置它
userAccContr = userAccContr - 64
if userAccContr >= 32:# // PASSWD_NOTREQD - 不需要密码
userAccContr = userAccContr - 32
if userAccContr >= 16:# // LOCKOUT
userAccContr = userAccContr - 16
if userAccContr >= 8:# // HOMEDIR_REQUIRED - 需要主文件夹
userAccContr = userAccContr - 8
# if userAccContr >= 2:#// ACCOUNTDISABLE - 禁用用户帐户

# 	userAccContr = userAccContr - 2;
# if  userAccContr >= 1:#// SCRIPT - 将运行登录脚本
# 	userAccContr = userAccContr - 1;
if userAccContr >= 2:
	return 1
else:
	return 0
5、对接需求:Python版本-库安装-依赖库-依赖环境-测试环境;
6、ldap3库查询数据返回的结果默认最多1000条,可多次查询: server = Server(“ldap://example.example.com”, get_info=ALL) with Connection(server,ad_username, ad_password) as conn: conn.search(search_bitmain, dept_filter, attributes=dept_attributes, paged_size=1000) addept_entries = list() addept_entries.extend(conn.entries) cookie = conn.result['controls']['1.2.840.113556.1.4.319']['value']['cookie'] while cookie: conn.search(“OU=BITMAIN,DC=bitmain-inc,DC=com”, “(&(objectClass=person)(objectClass=organizationalPerson)(objectClass=user))”, attributes=”['displayName','name','distinguishedName','objectGUID','OU']”, paged_size=1000,paged_cookie=cookie) addept_entries.extend(conn.entries) cookie = conn.result['controls']['1.2.840.113556.1.4.319']['value']['cookie']

你可能感兴趣的:(笔记)