• 3. 技术专题


    • 目录服务(数据库)
      • 目录服务是一个特殊的数据库,用来保存描述性的、基于属性的详细信息,支持过滤功能。
      • 是动态的,灵活的,易扩展的。
      • 常用于人员组织管理(域控服务),电话簿,地址簿。
    • LDAP
      • 通常是389端口
      • C#中连接时,直接使用domain:389即可,不需要前面指定LDAP://
      • LDAP(Light Directory Access Portocol,轻量目录访问协议),它是基于X.500标准的轻量级目录访问协议。是一个用于查询目录服务(提供程序中的项目)的(应用)标准/协议。
      • AD等多种域/目录服务器都支持LDAP形式的查询。
      • 基本概念
        • 目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。
        • 条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。
        • 对象类(objectClass):与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。
        • 属性(property):描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。
      • DC、UID、OU、CN、SN、DN、RDN
        • dc
          • domain component
          • 域名的部分,其格式是将完整的域名分成几部分,如域名为example.com变成dc=example,dc=com(一条记录的所属位置)
          • 类似于程序中的命名空间,多级的话就拆成多个
        • uid
          • user id
          • 用户ID songtao.xu(一条记录的ID)
        • ou
          • organization unit
          • 组织单位,组织单位可以包含其他各种对象(包括其他组织单元),如“oa组”(一条记录的所属组织)
        • cn
          • common name
          • 公共名称,如“Thomas Johansson”(一条记录的名称)
        • sn
          • surname
          • 姓,如“许”
        • dn
          • distinguished name
          • “uid=songtao.xu,ou=oa组,dc=example,dc=com”,一条记录的位置(唯一)
          • 并不是字面上的一个name而已,可以理解成一个完整的绝对路径,还包含了dc等信息
          • ldp.exe中search时用的Base Dn其实就是指的dn
        • run
      • LDAPS
        • 基于ssl,通常是636端口
        • C#中连接时,直接使用domain:636即可,不需要前面指定LDAP://或LDAPS://
        • 也就是所谓的Secure LDAP或者说LDAP via SSL
        • 认证时,通常需要先把认证server端的证书用的根证书先装好,一般导入/装在计算机上
        • 从代码上看,和LDAP相比,只是连接端口不同,用的类和执行查询语句是一样的,代码不需要改动,但client可能需要验证server certificate
    • Active Directory(活动目录)
      • AD是微软(专有)的对目录服务数据库的实现(和更多)。
      • Active Directory是一个基于数据库的系统,在Windows环境中提供身份验证,目录,策略和其他服务。
      • Windows Server上可以通过控制面板->程序与Windows功能->添加Windows功能进行安装
    • 工具
      • AD Explorer
        • 微软本身就有一个Active Directory可视化工具,可以按层显示所有条目,但不知道能不能执行搜索语句,可以去官网下载
      • ldp.exe
        • 包含在Windows Support Tools中,Windows Server中已经有了,普通的Windows中需要单独下载
        • 使用
          • Connect
            • 使用域名/IP+端口号进行连接
            • 一般没打开ssl
          • Bind
            • 使用域账号登陆。
            • 要看服务器的配置和要求,有的支持匿名查询(即可以跳过这一步直接search),有的要求必须先登录(这时如果没有bind就search,会报错让你去先bind)
          • Browser->Search
            • Base Dn
              • 搜索范围,如DC=xxx,DC=yyy,DC=zzz
            • Filter
              • 搜索表达式
              • 最外层包一层小括号()
              • 要同时满足多个子条件的话,开头放一个&,然后后面依次放多个小括号包着的子条件,如(&(x=Xx)(y=yy)(z=zz))
              • 每个条件/子条件都是一个AttributeName=value的形式,不过value支持模糊匹配,可以在前后使用*进行模糊匹配(有的域服务器可能会做限制,比如不能在最前面加*)
            • scope
              • 一般选subtree,那么每一级都会去search
              • 代码中也要去设
            • Options
              • Attributes
                • 想要搜索哪些属性/字段
                • 默认只有一些重要的通用的属性(如objectClass,name,ou,dc,cn,distinguishName等),域服务器上可以根据公司需要自定义一些字段
                • 填*,即代表要返回所有字段
          • Disconnect
    • 代码
      • .NET
        • 使用System.DirectoryServices和System.DirectoryServices.Protocols进行连接/认证/查询
        • 查询时,SearchRequest的attributesList参数设成null,即要求返回所有attributes
  • 相关阅读:
    JSDI——实现数据库连接池(JDBC改进)
    MD5加密算法(实际应用)
    Java Web 自动登录
    异步编程设计模式Demo
    异步编程设计模式Demo
    禁止程序启动2次
    C#线程同步的几种方法
    ASP.NET MVC的Action Filter
    带有返回值的intent
    android 属性动画
  • 原文地址:https://www.cnblogs.com/wyp1988/p/14857757.html
Copyright © 2020-2023  润新知