在ToB的项目里,公司部门之间是树状的关系,成员结构也类似。由于windows的使用范围很广,尤其是在企业里,所以它集成的Active Directory域服务往往企业应用需要兼容的。
什么是基于目录的用户管理?
基于目录的用户管理是一种集中化的用户身份管理方式。它将组织中的所有用户信息(如用户名、密码、所属组、权限等)存储在一个统一的数据库中,即目录。通过访问这个目录,管理员可以对用户进行添加、删除、修改等操作,并对用户访问资源的权限进行统一管理。
LDAP是什么?
LDAP(Lightweight Directory Access Protocol)是一种轻量级目录访问协议。它定义了客户端如何访问和修改目录中信息的标准。LDAP目录就像一个电话簿,存储着各种对象的属性(如用户、计算机、组织单位等)。LDAP协议提供了对这些对象的查询、添加、修改和删除等操作。
Active Directory是什么?
Active Directory是微软开发的一种目录服务,它实现了LDAP协议。Active Directory通常被用于Windows网络环境中,为域中的计算机、用户和组提供集中化的管理。它不仅存储用户信息,还提供了诸如组策略、Kerberos认证等高级功能。
LDAP和Active Directory的关系
LDAP是一种协议,而Active Directory是实现了LDAP协议的一种目录服务。也就是说,Active Directory是LDAP的一个具体实现。你可以把LDAP看作是一种语言,而Active Directory看作是用这种语言写的一本书。
另外AD通过DS服务对外暴露了相关的操作,包括对象查询、认证和修改等,下面我贴一个某场景下较为完整的成员对象数据结构:
type LdapAccount = { objectClass: string; cn: string; distinguishedName: string; instanceType: string; whenCreated: string; whenChanged: string; displayName: string; uSNCreated: string; uSNChanged: string; name: string; objectGUID: string; userAccountControl: string; badPwdCount: string; codePage: string; countryCode: string; badPasswordTime: string; lastLogoff: string; lastLogon: string; pwdLastSet: string; primaryGroupID: string; objectSid: string; accountExpires: string; logonCount: string; sAMAccountName: string; sAMAccountType: string; userPrincipalName: string; objectCategory: string; dSCorePropagationData: string; lastLogonTimestamp: string; };
可以看到它的字段是非常多的,可能很多字段某个项目不会用到,但这些字段的设计往往是日积月累的经验积累,我们在设计自己的身份认证或者账号体系的时候可以作为参考
LDAP和Active Directory的对比
特点 | LDAP | Active Directory |
实现 | 协议 | 目录服务 |
平台 | 多平台 | 主要用于Windows |
功能 | 基本的目录操作 | 丰富的管理功能 |
应用场景 | 广泛应用于各种系统 | 主要用于Windows网络环境 |
账号密码身份认证时序图
利用ldap协议接口,与AD域通讯实现认证的简单过程如下:
编辑
说明:
- 客户端: 用户。
- 认证服务器: Nodejs后端。
- Directory Server: 目录服务器(如Active Directory)。
- 用户在认证界面输入用户名和密码。
- 认证服务器将用户的凭证发送给目录服务器进行验证。
- 目录服务器查询用户的信息,并返回验证结果给认证服务器。
- 认证服务器根据目录服务器返回的结果,告知用户认证成功或失败。
总结
基于目录的用户管理为组织提供了统一、高效的用户管理方式。LDAP作为一种标准协议,为目录服务提供了基础。Active Directory作为LDAP的具体实现,在Windows环境中得到了广泛应用。通过了解这些概念,我们可以更好地理解现代网络环境中的用户身份管理机制。