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)的值。

image-20230209143607136

Windows AD域中几个属性

  1. CN和sAMAccountName

    Windows AD域中创建用户时,输入信息如下:

    image-20230209145011957

    cn表示姓名(full user name),即xiaoming,sAMAccountName表示用户登录名(login user name),即user1。

    在windows Active Directory用户和计算机中,点击”查看“,选择”高级功能“,然后可以查看更多的用户属性。

    image-20230209145443410

    通过用户属性查询到用户xiaoming的CN是xiaoming,sAMAccountName是user1,dn是CN=xiaoming,OU=TAC,DC=fortibj,DC=com

    image-20230209145843589

    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"
      
  2. OU和Group

    OU是组织单元,Group是用户组,两者不一样。

    从下图可以看出用户xiaoming在组织单元OU TAC下,属于用户组Domain Users和grp1。

    image-20230209152105454

LDAP交互过程

  1. LDAP交互过程

    image-20230210142559031

  2. 报文交互过程分析

    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连接

      image-20230210143317065

    • FortiGate以管理员DN和密码为参数向LDAP服务器发送管理员绑定请求报文(Bind Request)获得查询权限

      image-20230210145446593

    • LDAP服务器进行绑定请求报文的处理。如果绑定成功,则向FortiGate发送绑定成功的回应报文

      image-20230210145418364

    • FortiGate以输入的用户名为参数,向LDAP服务器发送用户DN查询请求报文(Search Request)

      image-20230210145605800

    • LDAP服务器收到查询请求报文后,对用户DN进行查找。如果查询成功,则向FortiGate发送查询成功的回应报文,返回用户的DN

      image-20230210145716681

    • FortiGate以查询得到的用户DN和用户输入的密码为参数,向LDAP服务器发送用户DN绑定请求报文(Bind Request),检查用户密码是否正确

      image-20230210150614733

    • LDAP服务器进行绑定请求报文的处理,如果绑定成功,则向FortiGate发送绑定成功的回应报文;如果绑定失败,则向FortiGate发送绑定失败的回应报文

      image-20230210150554626

    • 如果绑定成功,FortiGate向LDAP服务器发送用户属性查询请求报文(Search Request),获取用户所属的用户组

      memberof:用户所属的组的DN。

      primaryGroupID:指定用户的主组的相对标识符(RID)。默认情况下是Domain Users组的RID,用户是其主组的成员,Domain User没有列在用户的memberOf属性中。因此需要单独查询主组的DN。

      objectSid:指定安全主体对象的安全标识符(SID)。SID是用于标识安全主体对象的唯一值。

      image-20230210150652073

    • LDAP服务器对查询请求报文进行处理,返回用户所在的用户组

      image-20230210151645579

    • FortiGate向LDAP服务器发送用户属性查询请求报文(Search Request),获取用户所在的主组

      image-20230210151956031

      LDAP服务器中Domain User objectSid的值与上图assertionValue的值一致。

      image-20230210152032486

    • LDAP服务器对查询请求报文进行处理,返回用户所在主组的DN

      image-20230210152324836

    • FortiGate解除绑定

      image-20230210152358453

常见的标准的LDAP响应码

  1. 常见的标准的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
  2. 错误码抓包举例

    • 密码错误

    image-20230210153808243

    • 账号禁用

      image-20230210153858263

    • DN语法错误

      image-20230210153958587

Copyright © 2023 Fortinet Inc. All rights reserved. Powered by Fortinet TAC Team.
📲扫描下方二维码分享此页面👇
该页面修订于: 2023-02-24 17:18:37

results matching ""

    No results matching ""