zoukankan      html  css  js  c++  java
  • .net和LDAP集成

    每次开发系统都要单独设计权限,无数的系统就有了无数的权限。
    其实很早就有了解决的办法,活动目录的技术可以实现。
    微软的passport就想解决这样的问题,可惜,大部分的事情都是由商业决定的。
    这次设计的系统就希望能把权限这部分交给Ldap来管理。
    按照下面的方法在Windows Server 2003创建了Active Directory.


     创建 Active Directory 在独立服务器上安装了 Windows Server 2003 之后,运行“Active Directory 向导”以创建新的 Active Directory 目录林或域,然后将 Windows Server 2003 计算机转换为目录林中的第一个域控制器。若要将 Windows Server 2003 计算机转换为目录林中的第一个域控制器,请按照下列步骤操作:
    1. 在计算机的 CD-ROM 或 DVD-ROM 驱动器中插入 Windows Server 2003 光盘。
    2. 单击 开始 ,单击 运行 ,然后键入 dcpromo 。
    3. 单击 确定 以启动“Active Directory 安装向导”,然后单击 下一步 。
    4. 单击“新域的域控制器”,然后单击 下一步 。
    5. 单击“在新目录林中的域”,然后单击 下一步 。
    6. 为新域指定完整的 DNS 名称。请注意,因为该过程用于实现实验室环境,而不是将该环境集成到现有的 DNS 基础结构中,因此可以在该设置中使用诸如 mycompany.local 之类的一般名称。单击 下一步 。
    7. 接受域的默认 NetBIOS 名(如果使用第 6 步中的建议,则它为“mycompany”)。单击 下一步 。
    8. 将数据库和日志文件的位置设置为在默认设置 c:\winnt\ntds 文件夹下,然后单击 下一步 。
    9. 将 Sysvol 文件夹的位置设置为在默认设置 c:\winnt\sysvol 文件夹下,然后单击 下一步 。
    10. 单击“在这台计算机上安装并配置 DNS 服务器”,然后单击 下一步 。
    11. 单击“只与 Windows 2000 或 Windows Server 2003 服务器或操作系统兼容的权限”,然后单击 下一步 。
    12. 因为这是实验室环境,所以将目录服务恢复模式的管理员密码留为空白。请注意,在完整的生产环境中,应通过使用安全密码格式设置此密码。单击 下一步 。
    13. 检查并确认所选择的选项,然后单击 下一步 。
    14. Active Directory 的安装将继续进行。请注意,该操作将需要几分钟。
    15. 出现提示时,重新启动计算机。计算机重新启动后,确认已经为新的域控制器创建了域名系统 (DNS) 服务位置记录。若要确认已创建了 DNS 服务位置记录,请按照下列步骤操作:
      1. 单击 开始 ,指向 管理工具 ,然后单击 DNS ,以启动 DNS 管理控制台。
      2. 展开该服务器名称,再展开 正向搜索区域 ,然后展开该域。
      3. 确认 _msdcs、_sites、_tcp 和 _udp 文件夹已存在。这些文件夹和它们包含的服务位置记录对于 Active Directory 和 Windows Server 2003 的运行至关重要。

      将用户和计算机添加到 Active Directory 域中

      新的 Active Directory 域建立后,在该域中创建一个用户帐户作为管理帐户。在将该用户添加到适当的安全组中时,使用该帐户将计算机添加到域中。
      1. 若要创建新用户,请按照下列步骤操作:
        1. 单击 开始 ,指向 管理工具 ,然后单击“Active Directory 用户和计算机”,以启动 Active Directory 用户和计算机控制台。
        2. 单击已创建的域名,然后展开这些目录。
        3. 右键单击 用户 ,指向 新建 ,然后单击 用户 。
        4. 键入新用户的名、姓和用户登录名,然后单击 下一步 。
        5. 键入新密码,确认密码,然后单击以选中以下复选框之一:

          • 用户下次登录时须更改密码(推荐多数用户采用)
          • 用户不能更改密码
          • 密码永不过期
          • 帐户已停用
          单击 下一步 。
        6. 检查提供的信息是否每一项均正确,单击 完成 。
      2. 创建新用户后,让该用户帐户成为能够允许用户执行管理任务的组中的成员。因为所控制的是实验室环境,所以可以通过使其成为 Schema、Enterprise 和 Domain Administrators 组的成员,授予该用户帐户完全的管理访问权限。若要将帐户添加到 Schema、Enterprise 和 Domain Administrators 组,请按照下列步骤操作:
        1. 从“Active Directory 用户和计算机”控制台,右键单击已创建的新帐户,然后单击 属性 。
        2. 单击 隶属于 选项卡,然后单击 添加 。
        3. 在 选择组 对话框中,指定一个组,然后单击 确定 将所需组添加到列表中。
        4. 对用户要在其中具有帐户成员资格的每一个组重复选择过程。
        5. 单击 确定 完成。
      3. 该过程的最后一步是将成员服务器添加到域中。该过程也适用于工作站。若要向域中添加计算机,请按照下列步骤操作:
        1. 登录到要将其添加到域的计算机。
        2. 右键单击 我的电脑 ,然后单击 属性 。
        3. 单击 计算机名 选项卡,然后单击 更改 。
        4. 在 计算机名更改 对话框中,单击 隶属于 下方的 域 ,然后键入域名。单击 确定 。
        5. 在显示提示后,键入您以前创建的帐户的用户名和密码,然后单击 确定 。

          将显示欢迎您来到该域的消息。
        6. 单击 确定 返回到 计算机名 选项卡,然后单击 确定 完成。
        7. 出现提示时,重新启动计算
    在Microsoft Visual C# .net 用System.DirectoryServices.DirectoryEntry来实现对Ldap服务器的访问。

    创建用户界面

    1. 在“文件”菜单上指向“新建”,然后单击“项目”。
    2. 在“新建项目”对话框中,选择左窗格中的 Visual Basic 或 Visual C#,然后选择“Windows 应用程序”模板。将项目命名为 ActiveDirectory
    3. 在工具箱的“Windows 窗体”选项卡中,将 TreeView 控件拖到 Form1 上。
    4. TreeView 控件的 Name 属性设置为 viewPC

      此演练将在稍后的过程中修改 TreeView 控件以包含三个顶级节点,各个节点分别用于用户、组和服务。每个二级节点都将代表一个在您的计算机上注册的用户、组或服务。每个用户、组和服务都具有两个子节点,一个用于其 Active Directory 路径,另一个用于其属性。

    配置 DirectoryEntry 组件

    1. 在解决方案资源管理器中,右击项目并从快捷菜单中选择“添加引用”。
    2. 将引用添加到 System.DirectoryServices.dll
    3. 在工具箱的“组件”选项卡中,将 DirectoryEntry 组件实例拖到设计器中。
    4. DirectoryEntry 组件的 Name 属性设置为 entryPC
    5. DirectoryEntry 组件的 Path 属性设置为 WinNT://Domain/YourComputerName。使用您的域和计算机名指示 DirectoryEntry 组件使用用于 Active Directory 的 WinNT 服务提供程序来检查本地计算机。
      注意   如果您不知道域名或计算机名,请与系统管理员联系。
      提示   如果域名或计算机名不正确,应用程序将在运行时引发异常。可以输入路径 WinNT://YourComputerName,服务提供程序将尝试定位该计算机。

    向 TreeView 控件添加顶级节点

    1. 在设计器中,双击“Form1”以在代码编辑器中创建 Form_Load 事件处理程序。
    2. 通过添加代码来修改 Form_Load 方法,从而为用户、组和服务创建三个顶级节点。当应用程序运行时,名为 entryPC 的组件的 Children 属性包含在 Path(您的计算机)中找到的所有项。每个子级也都是一个 DirectoryEntry 对象。因为您正在计算机路径上使用 WinNT 提供程序,子 DirectoryEntry 对象的 SchemaClassName 属性将是“User”、“Group”或“Service”之一。select 或 switch 语句可用于确定项类型并向正确的组添加节点。

      下一步中将编写 AddPathAndProperties 方法。

      ' Visual Basic
      Private Sub Form1_Load(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MyBase.Load
         Dim users As New TreeNode("Users")
         Dim groups As New TreeNode("Groups")
         Dim services As New TreeNode("Services")
         viewPC.Nodes.AddRange(New TreeNode() {users, groups, services})
      
         Dim child As System.DirectoryServices.DirectoryEntry
         For Each child In entryPC.Children
            Dim newNode As New TreeNode(child.Name)
            Select Case child.SchemaClassName
               Case "User"
                  users.Nodes.Add(newNode)
               Case "Group"
                  groups.Nodes.Add(newNode)
               Case "Service"
                  services.Nodes.Add(newNode)
            End Select
            AddPathAndProperties(newNode, child)
         Next
      End Sub
      
      // C#
      private void Form1_Load(object sender, System.EventArgs e)
      {
         TreeNode users = new TreeNode("Users");
         TreeNode groups = new TreeNode("Groups");
         TreeNode services = new TreeNode("Services");
         viewPC.Nodes.AddRange(new TreeNode[] { users, groups, services });
      
         foreach(System.DirectoryServices.DirectoryEntry child 
            in entryPC.Children) 
         {
            TreeNode newNode = new TreeNode(child.Name);
            switch (child.SchemaClassName) 
            {
               case "User" :
                  users.Nodes.Add(newNode);   
                  break;
               case "Group" :
                  groups.Nodes.Add(newNode);   
                  break;
               case "Service" :
                  services.Nodes.Add(newNode);   
                  break;
            }
            AddPathAndProperties(newNode, child);
         }
      }
    3. 将以下代码添加到 Form1 类,以创建 AddPathAndProperties 方法。node 参数表示与该项关联的 TreeNode 对象。entry 参数表示目录中的一个项,即一个用户、一个组或一个服务。

      DirectoryEntry 组件具有 Properties 属性,该属性包含一个字符串索引的属性集合。该集合的内容取决于 DirectoryEntry 组件的架构。Properties 集合具有 PropertyNames 属性,该属性是一个所有属性名称的集合。通过逐一通过该集合,您可以检索每个属性。每个属性都具有一组关联的值。在本方法中,只检索每个属性的第一个值。

      ' Visual Basic
      Private Sub AddPathAndProperties(ByVal node As TreeNode, _
      ByVal entry As System.DirectoryServices.DirectoryEntry)
         node.Nodes.Add(New TreeNode("Path: " & entry.Path))
         Dim propertyNode As New TreeNode("Properties")
         node.Nodes.Add(propertyNode)
      
         Dim propertyName As String
         Dim oneNode As String
         For Each propertyName In entry.Properties.PropertyNames
            Try
               oneNode = propertyName & ": " & _
                  CType(entry.Properties(propertyName)(0), String)
            Catch
               oneNode = propertyName & ": " & _
                  "No text representation."
            End Try
            propertyNode.Nodes.Add(New TreeNode(oneNode))
         Next
      End Sub
      
      // C#
      private void AddPathAndProperties(TreeNode node, 
         System.DirectoryServices.DirectoryEntry entry)
      {
         node.Nodes.Add(new TreeNode("Path: " + entry.Path));
         TreeNode propertyNode = new TreeNode("Properties");
         node.Nodes.Add(propertyNode);
         foreach (string propertyName in entry.Properties.PropertyNames) 
         {
            string oneNode = propertyName + ": " + 
               entry.Properties[propertyName][0].ToString();
            propertyNode.Nodes.Add(new TreeNode(oneNode));
         }
      }

    运行程序

    1. 按 F5 键运行该程序。
    2. 打开节点以检查路径和属性。因为所有用户共享相同的架构,所以它们共享相同的属性集。对于组和服务节点,情况也是这样。
  • 相关阅读:
    数据库
    计算机基础知识系列
    《大话数据结构》参考
    数据结构与算法系列
    python cookbook
    Python教程 廖雪峰
    Python入门学习系列
    认识 React——声明式,高效且灵活的用于构建用户界面的 JavaScript 库
    线程---同步(synchronized)
    线程---插队和礼让执行(join和yield)
  • 原文地址:https://www.cnblogs.com/echo/p/120972.html
Copyright © 2011-2022 走看看