LDAP认证原理
LDAP简介
LDAP(Light Directory Access Protocol),轻量级目录访问协议,是一个为查询、浏览和搜索而优化的专业分布式数据库,它成树状结构组织数据。目录服务是由目录数据库和一套访问协议组成的系统。
LDAP组织结构
在LDAP中目录是按树形结构组织,而DN(Distinguished Name)唯一可区别的名称,记录了一条记录的位置。DN有三个属性,分别是DC(Domain Component)、OU(Organizational Unit)与CN(Common Name)。
DC:域控制器,类似于文件系统目录;
OU:组织单元,类似部门;
CN:区分身份的属性,类似名称。
如下图所示,dn是从树的叶子节点逐层向根节点推导出的一条唯一路径,表明了这个数据结构中的唯一一条记录。一个完整的dn:cn=xiaoming,ou=tac,dc=fortibj,dc=com,查询得到一条完整的记录,然后再取出所需属性(Attribute)的值。
Windows AD域中几个属性
CN和sAMAccountName
Windows AD域中创建用户时,输入信息如下:
cn表示姓名(full user name),即xiaoming,sAMAccountName表示用户登录名(login user name),即user1。
在windows Active Directory用户和计算机中,点击”查看“,选择”高级功能“,然后可以查看更多的用户属性。
通过用户属性查询到用户xiaoming的CN是xiaoming,sAMAccountName是user1,dn是CN=xiaoming,OU=TAC,DC=fortibj,DC=com
windows CLI查询DN
根据full name查询
C:\Users\Administrator>dsquery user -name xiaoming "CN=xiaoming,OU=TAC,DC=fortibj,DC=com"
根据login name查询
C:\Users\Administrator>dsquery user -samid user1 "CN=xiaoming,OU=TAC,DC=fortibj,DC=com"
OU和Group
OU是组织单元,Group是用户组,两者不一样。
从下图可以看出用户xiaoming在组织单元OU TAC下,属于用户组Domain Users和grp1。
LDAP交互过程
LDAP交互过程
报文交互过程分析
FortiGate执行如下命令验证用户名和密码,获取用户组属性。
# diagnose test authserver ldap LDAP208 user1 Pass@123456 authenticate 'user1' against 'LDAP208' succeeded! Group membership(s) - CN=grp1,CN=Users,DC=fortibj,DC=com CN=Domain Users,CN=Users,DC=fortibj,DC=com
报文交互过程如下:
建立TCP连接
FortiGate以管理员DN和密码为参数向LDAP服务器发送管理员绑定请求报文(Bind Request)获得查询权限
LDAP服务器进行绑定请求报文的处理。如果绑定成功,则向FortiGate发送绑定成功的回应报文
FortiGate以输入的用户名为参数,向LDAP服务器发送用户DN查询请求报文(Search Request)
LDAP服务器收到查询请求报文后,对用户DN进行查找。如果查询成功,则向FortiGate发送查询成功的回应报文,返回用户的DN
FortiGate以查询得到的用户DN和用户输入的密码为参数,向LDAP服务器发送用户DN绑定请求报文(Bind Request),检查用户密码是否正确
LDAP服务器进行绑定请求报文的处理,如果绑定成功,则向FortiGate发送绑定成功的回应报文;如果绑定失败,则向FortiGate发送绑定失败的回应报文
如果绑定成功,FortiGate向LDAP服务器发送用户属性查询请求报文(Search Request),获取用户所属的用户组
memberof:用户所属的组的DN。
primaryGroupID:指定用户的主组的相对标识符(RID)。默认情况下是Domain Users组的RID,用户是其主组的成员,Domain User没有列在用户的memberOf属性中。因此需要单独查询主组的DN。
objectSid:指定安全主体对象的安全标识符(SID)。SID是用于标识安全主体对象的唯一值。
LDAP服务器对查询请求报文进行处理,返回用户所在的用户组
FortiGate向LDAP服务器发送用户属性查询请求报文(Search Request),获取用户所在的主组
LDAP服务器中Domain User objectSid的值与上图assertionValue的值一致。
LDAP服务器对查询请求报文进行处理,返回用户所在主组的DN
FortiGate解除绑定
常见的标准的LDAP响应码
常见的标准的LDAP响应码
LDAP Result Code Description 0 SUCCESS 2 PROTOCOL ERROR 7 AUTH METHOD NOT SUPPORTED 16 NO SUCH ATTRIBUTE 21 INVALID SYNTAX 32 NO SUCH OBJECT 34 INVALID DN SYNTAX 49 INVALID CREDENTIALS/ ACCOUNT DISABLED 50 LDAP INSUFFICIENT ACCESS LDAP Error Message Data Description 0x525 user not found 0x52e invalid credentials 0x530 not permitted to logon at this time 0x531 not permitted to logon from this workstation 0x532 password expired 0x533 account disabled 0x701 account expired 0x773 user must reset password 0x775 account locked out 错误码抓包举例
- 密码错误
账号禁用
DN语法错误