使用LDAP进行身份验证

本教程介绍了Geoserver的LDAP支持,并逐步完成了针对LDAP服务器设置身份验证的过程。建议您将 LDAP身份验证 请先阅读部分内容,然后再继续。

LDAP服务器安装程序

本教程将使用模拟的LDAP服务器。下载并运行 acme-ldap JAR::

java -jar acme-ldap.jar

其输出应如下所示:

Directory contents:
  ou=people,dc=acme,dc=org
    uid=bob,ou=people,dc=acme,dc=org
    uid=alice,ou=people,dc=acme,dc=org
    uid=bill,ou=people,dc=acme,dc=org
  ou=groups,dc=acme,dc=org
  cn=users,ou=groups,dc=acme,dc=org
    member: uid=bob,ou=people,dc=acme,dc=org
    member: uid=alice,ou=people,dc=acme,dc=org
  cn=admins,ou=groups,dc=acme,dc=org
    member: uid=bill,ou=people,dc=acme,dc=org

  Server running on port 10389

下图说明了LDAP数据库的层次结构:

../../../_images/acme_ldap.png

LDAP树包括:

  • 根域组件, dc=acme,dc=org

  • 两个组织单位(组)命名 useradmin

  • 两个用户名 bobalice 谁是 user

  • 一个名为 bill 谁是 admin

配置LDAP身份验证提供程序

  1. 启动geoserver并以 admin 用户。

  2. 单击 Authentication 链接位于 Security 导航边栏的部分。

    ../../../_images/ldap11.jpg
  3. 向下滚动到 Authentication Providers 面板并单击 Add new 链接。

    ../../../_images/ldap21.jpg
  4. 单击 LDAP 链接。

    ../../../_images/ldap31.jpg
  5. 按如下方式填写设置表单的字段:

    • 集合 Name 至“Acme LDAP”

    • 集合 Server URL 到“ldap://localhost:10389/dc=acme,dc=org”

    • 集合 User lookup pattern 到“uid=0,ou=people”

  6. 通过在右侧的连接测试表单中输入用户名“bob”和密码“secret”来测试LDAP连接,然后单击 Test Connection 按钮。

    ../../../_images/ldap4.jpg

    应在页面顶部报告成功的连接。

  7. 保存。

  8. 返回“身份验证”页,向下滚动到 Provider Chain 面板并移动 acme-ldap 提供程序来自 AvailableSelected .

    ../../../_images/ldap5.jpg
  9. 保存。

测试LDAP登录

  1. 导航到geoserver主页并注销管理帐户。

  2. 以用户“bob”的身份登录,密码为“ret”。

    ../../../_images/ldap6.jpg

以Bob身份登录不会产生任何管理功能,因为BobAccount尚未映射到管理员角色。在下一节中,将配置geoserver以将组从LDAP数据库映射到角色。

将LDAP组映射到地理服务器角色

使用LDAP进行身份验证时,Geoserver通过在组名前加上前缀,将LDAP组映射到Geoserver角色 ROLE_ 并将结果转换为大写。例如,Bob和Alice是 user 组,以便在身份验证后为其分配一个名为 ROLE_USER 。同样,Bill也是 admin 组,因此他将被分配一个名为 ROLE_ADMIN

  1. 退出Web管理员并以管理员用户身份重新登录。

  2. 导航到 Authentication 页。

  3. 滚动至 Authentication Providers 面板并单击 acme-ldap 链接。

    ../../../_images/ldap7.jpg
  4. 在“设置”页上,填写以下表单字段:

    • 集合 Group search base 到“ou=组”

    • 集合 Group search filter “成员=0”

    第一个字段指定组所在的LDAP目录树的节点。在这种情况下,组织单位命名为 groups .第二个字段指定要用于定位特定用户所属组的LDAP查询筛选器。这个 {{0}} 是替换为 uid 用户的。

    • 集合 Group to use as ADMIN 至“管理员”

    • 集合 Group to use as GROUP_ADMIN 至“管理员”

    如果要支持分层LDAP组:

    • 检查 Enable Hierarchical groups search 盒子。

    • 集合 Max depth for hierarchical groups search 到10(-1表示无限深,或要支持的深度编号)。

    • 集合 Nested group search filter “成员=0”

    ../../../_images/ldap141.jpg

    这些设置允许LDAP管理组中的用户被识别为地理服务器管理员。

  5. 保存。

此时,LDAP提供程序将根据用户所属的组向经过身份验证的用户填充角色。

此时的成员 admin 一旦通过身份验证,应授予LDAP组完全的管理权限。从管理帐户注销,用密码“hello”以“bill”登录。一旦登录,应提供完整的管理功能。

配置LDAP角色服务

另一个步骤允许配置角色服务以从LDAP存储库中获取地理服务器角色,并允许将访问权限分配给这些角色。

  1. 单击 Users,Group,Roles 链接位于 Security 导航边栏的部分。

  2. 单击 Add new linkRole Services 部分。

  3. 单击 LDAP 选择权 New Role Service 部分。

    ../../../_images/ldap15.png
  4. 进入 ldaprsName 文本字段。

  5. 进入 ldap://localhost:10389/dc=acme,dc=orgServer URL 文本字段。

  6. 进入 ou=groupsGroup search base 文本字段。

  7. 进入 member=uid={{0}},ou=people,dc=acme,dc=orgGroup user membership search filter 文本字段。

  8. 进入 cn=*All groups search filter 文本字段。

然后我们需要选择一个用户在服务器上进行身份验证(许多LDAP服务器不允许匿名数据查找)。

  1. 检查 Authenticate to extract roles 复选框。

  2. 进入 uid=bill,ou=people,dc=acme,dc=orgUsername 文本字段。

  3. 进入 helloPassword 文本字段。

如果我们希望层级组工作,我们需要:

  1. 检查 Enable Hierarchical groups search 复选框。

  2. 进入 10Max depth for hierarchical groups search 文本字段。

  3. 进入 member={{1}}Nested group search filter 文本字段。

  4. 保存。

  5. 单击 ldaprs 角色服务项 Role Services 部分。

  6. 选择 ROLE_ADMINAdministrator role 组合框。

  7. 选择 ROLE_ADMINGroup administrator role 组合框。

  8. 再次保存。

现在您应该可以看到并分配新的 ROLE_ADMINROLE_USER 角色 Available Roles 列表显示(例如 DataServices 规则部分。