OpenLDAP 接入 NineData SSO

本文面向使用 OpenLDAP 管理人员账户信息的企业,提供将 OpenLDAP 接入单点登录(SSO)的最佳实践指南,以实现统一认证和授权管理。通过集成 OpenLDAP、phpLDAPadmin、Keycloak,您可以轻松通过 SSO 功能登录 NineData。

1. 背景信息

OpenLDAP(Open Lightweight Directory Access Protocol)是一个开源的轻量级目录访问协议(LDAP)服务器,用于存储和管理组织的用户账号和身份信息,在企业中被广泛应用。而多数企业中存在着多个应用系统并行运行的情况,且这些应用系统通常拥有独立的身份认证和授权机制,导致用户需要为每个系统单独登录和管理账号。将 OpenLDAP 接入 SSO 后,用户只需一次登录即可以无缝地访问其他系统,除了简化账号管理和系统登录流程带来的便利之外,还降低了账户信息泄露的风险,提高系统的整体安全性。

2. 前提条件

拥有系统的 Root 权限,您可以在执行本文步骤前,先执行 sudo su 命令切换到 Root 账号。

3. 环境说明

本文从 0 到 1 介绍所有需要的软件工具的安装以及配置方法,您可在阅读时忽略您系统中已有软件的操作步骤。本文所使用的环境说明如下:

  • 系统版本:CentOS Linux release 7.9.2009(提示:您可通过在命令行执行 cat /etc/*release 命令查看当前系统版本。)
  • Docker 版本:24.0.0
  • Docker Compose 版本:2.17.3
  • OpenLDAP 版本:2.4.57
  • phpLDAPadmin 版本:1.2.5
  • KeyCloak 版本:9.0.0

4. 安装 Docker 和 Docker Compose

为方便安装和配置,本文使用 DockerDocker Compose 来运行 OpenLDAP、OpenLDAPAdmin 以及 KeyCloak。

以下是 CentOS 或者 Red Hat Enterprise Linux(RHEL)等基于 RPM 包管理的 Linux 系统中使用 yum 命令的安装步骤。

4.1 安装 Docker

1. 打开终端命令行工具,执行下列命令卸载旧版本的 Docker(如有):

  •  
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
2. 安装 yum 包管理器扩展工具 yum-utils:
  •  
sudo yum install -y yum-utils

3. 设置 Docker 稳定版仓库:

  •  
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

4. 安装最新版本的 Docker:

  •  
sudo yum install docker-ce docker-ce-cli containerd.io

5. 启动 Docker 服务:

  •  
sudo systemctl start docker

6. 验证 Docker 是否安装成功:

  •  
sudo docker run hello-world

提示:命令行中输出以下内容,则说明 Docker 已经成功安装

  •  
Hello from Docker! This message shows that your installation appears to be working correctly. ...
4.2 安装 Docker Compose

1. 打开终端命令行工具,执行下列命令下载 Docker Compose 二进制内容并保存到 /usr/local/bin/ 目录的 docker-compose 文件中。

  •  
curl -SL https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
2. 为 docker-compose 文件设置可执行权限。
  •  
sudo chmod u+x /usr/local/bin/docker-compose
3. 为 docker-compose 建立软连接,以便在任意目录下直接执行
  •  
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

4. 验证 Docker Compose 是否安装成功:

  •  
docker-compose

提示:命令行中输出以下内容,则说明 Docker Compose 已经安装成功:

  •  
Usage:  docker compose [OPTIONS] COMMAND ...

 

 

5. 安装 OpenLDAP

为保证最佳实践的完整性,本文提供 OpenLDAP 的安装方式,如果您已经安装了 OpenLDAP,请忽略本节内容。

1. 打开终端命令行窗口,在任意目录下创建名为 docker-compose.yml 的文件,并通过编辑器(例如 vim)打开,复制粘贴下列内容并保存退出,各参数的说明请参见文件中的注释内容。

version: '3'

services: openldap:  image: osixia/openldap # 使用 osixia/openldap 镜像来启动 OpenLDAP 服务。  container_name: openldap # OpenLDAP 的容器名称,可自定义。  environment: # 配置环境变量。   - LDAP_ORGANISATION=Ninedata # OpenLDAP 的组织名称,将 NineData 更改为您的组织名称。   - LDAP_DOMAIN=ninedata.com # OpenLDAP 的域名,更改为您自身的 OpenLDAP 服务域名。   - LDAP_ADMIN_PASSWORD=your_password # OpenLDAP 服务的管理员密码。  ports: # 配置 OpenLDAP 的服务端口。   - "389:389" # 基于明文传输的 LDAP 服务端口,默认为 389。   - "636:636" # 基于SSL/TLS 加密传输的 LDAP 服务端口,默认为 636。  volumes: # 将 /var/lib/ldap 和 /etc/ldap/slapd.d 目录映射到本地的 ./data/ldap 和 ./data/slapd.d 目录,以便数据可以持久化保存。   - ./data/ldap:/var/lib/ldap   - ./data/slapd.d:/etc/ldap/slapd.d

2. 进入 docker-compose.yml 文件所在目录,执行如下命令拉取并根据 docker-compose.yml 中配置的参数启动 OpenLDAP 服务:

  •  
docker-compose up -d

执行完成后,您可以执行 docker-compose ps 命令查看 OpenLDAP 服务的状态,STATUS 列显示为 Up 即代表启动成功。

6. 安装 phpLDAPadmin

phpLDAPadmin 用于管理和操作 OpenLDAP 中的用户信息,具有直观的界面,能够浏览目录结构、搜索和编辑目录中的条目、管理用户、组和其他 LDAP 对象。

1. 打开终端命令行窗口,执行如下命令拉取 phpLDAPadmin Docker 镜像:

  •  
docker pull osixia/phpldapadmin

2. 创建并启动 phpLDAPadmin Docker 容器:

  •  
docker run --name phpldapadmin-container -p 6443:443 --env PHPLDAPADMIN_LDAP_HOSTS=192.168.2.33 --detach osixia/phpldapadmin

参数说明

  • --name phpldapadmin-container:自定义 phpLDAPadmin 容器的名称,其中 phpldapadmin-container 可以替换成您的自定义名称。

  • -p 6443:443:将本机的 6443 端口映射到容器的 443 端口,以便通过本机的 6443 端口访问 phpLDAPadmin 服务,您也可以使用其他端口号替换 6443。

  • --env PHPLDAPADMIN_LDAP_HOSTS=192.168.2.33:设置环境变量 PHPLDAPADMIN_LDAP_HOSTS,该环境变量指定了 LDAP 服务所在的主机地址,您需要将 192.168.2.33 替换为您实际的 LDAP 服务器地址。

  • --detach:在后台运行容器,防止阻塞终端。

  • osixia/phpldapadmin:指定要运行的 Docker 镜像名称。
 

3. 在浏览器中访问 https://<IP 地址>:<端口>打开 phpLDAPadmin 登录页面(本示例中为 https://192.168.2.33:6443),单击左侧导航栏的 login,然后在右侧输入 Login DN 以及 Password,单击 Authenticate 登录 OpenLDAP 系统。

  • IP 地址:请根据上一步中实际配置的 PHPLDAPADMIN_LDAP_HOSTS 参数值填写。

  • 端口:请根据上一步中实际配置的 -p 参数值填写。

  • Login DN:登录信息,通常由多个 RDN(Relative Distinguished Name)组成,每个 RDN 由属性和属性值对组成,用逗号分隔。例如,一个典型的 DN 可能是 cn=admin,dc=ninedata,dc=com。其中 cn=admin 是 OpenLDAP 系统的管理员用户,dc=ninedata 和 dc=com 是您自身的服务域名,这些配置信息在步骤二的 docker-compose.yml 文件中可以找到。

  • Password:OpenLDAP 服务的管理员密码,同样可以在步骤二的 docker-compose.yml 文件中找到。

提示
  • 由于自签名证书问题,首次访问时,浏览器可能会拦截您的访问,此时需要单击高级,然后单击继续前往192.168.2.33(不安全)即可。本示例基于 Chrome 浏览器,不同浏览器的提示信息不同,请以实际情况为准。

  • 如果浏览器提示无法打开页面,或者报 ERR_INVALID_HTTP_RESPONSE 错误,请确保您使用的 URL 前缀为 https://,而非 http://。

4. 由于本示例为新装 OpenLDAP,里面没有数据,我们通过 phpLDAPadmin 向 OpenLDAP 中添加一个组织,并在组织中添加一条用户数据。

6.1 创建组织单位(ou)

1. 单击左侧导航栏中的域名,并在右侧页面中单击 Create a child entry。

2. 在选择创建模板页面,单击 Default。

3. 在 ObjectClasses 列表中,选择 organizationalUnit,然后单击 Proceed >> 按钮。

4. 在属性配置窗口,将 RDN 配置为 ou (ou),并在 ou 下方文本框中输入组织单位的名称,然后滚动页面至最下方,单击 Create Object 按钮。

提示:您可根据需求补充其他组织单位的信息。

5. 在确认页面,单击 Commit 即可。

6.2 在组织中创建用户(cn)

1. 单击左侧导航栏域名下的组织单位,并在右侧页面中单击 Create a child entry。

在选择创建模板页面,单击 Default。

在 ObjectClasses 列表中,选择 inetOrgPerson,然后单击 Proceed >> 按钮。

在属性配置窗口,将 RDN 配置为 cn (cn);在 cn 下方文本框中输入用户的通用名称;在 sn 下方文本框中输入用户的姓氏,并在 Password 下方文本框输入用户密码,然后滚动页面至最下方,单击 Create Object 按钮。

提示:您可根据需求补充其他用户信息。

在确认页面,单击 Commit 完成用户的创建。

为用户添加 User Name 属性作为用户的唯一标识,用于登录系统。在左侧导航栏中,选择刚创建的用户,并单击右侧页面中的 Add new attribute。

在属性配置窗口,将 RDN 配置为 User Name,在添加的 User Name 属性下方的文本框中,输入用户的唯一标识,您可以自定义该标识,然后滚动页面至最下方,单击 Update Object。

在确认页面,单击 Update Object 完成用户属性添加。

7. 安装 KeyCloak 并从 OpenLDAP 同步用户数据

Keycloak 是一个开源的身份和访问管理解决方案,提供了身份验证、授权和单点登录(SSO)功能。本章节介绍如何利用 KeyCloak 同步 OpenLDAP 中的用户数据,用于接入 SSO。

1. 打开终端命令行工具,执行下列命令拉取 KeyCloak。

  •  
docker pull jboss/keycloak:9.0.0

2. 创建并启动 KeyCloak 容器。

  •  
docker run --name keycloak-container -p 8443:8443 --env KEYCLOAK_USER=admin --env KEYCLOAK_PASSWORD=admin --detach jboss/keycloak:9.0.0

参数说明

  • --name keycloak-container:自定义 KeyCloak 容器的名称,其中 keycloak-container 可以替换成您的自定义名称。

  • -p 8443:8443:将本机的 8443 端口映射到容器的 8443 端口,以便通过本机的 8443 端口访问 KeyCloak 服务,您也可以使用其他端口号替换本机 8443 端口。

  • --env KEYCLOAK_USER=admin:设置环境变量 KEYCLOAK_USER,该环境变量指定了 KeyCloak 服务的管理员账号为 admin,您可以自定义该账号。

  • --env KEYCLOAK_PASSWORD=admin:设置环境变量 KEYCLOAK_PASSWORD,该环境变量指定了 KeyCloak 服务的管理员密码为 admin,您可以自定义该密码。

  • --detach:在后台运行容器,防止阻塞终端。

  • jboss/keycloak:9.0.0:指定要运行的 Docker 镜像名称。

3. 在浏览器中访问 https://<IP 地址>:<端口> 打开 KeyCloak 欢迎页面(本示例中为https://192.168.2.33:8443),单击 Administration Console 进入登录页面。

  • IP 地址:请根据您实际安装 KeyCloak 服务的主机地址填写。

  • 端口:请根据上一步骤中您实际配置的 -p 参数的值输入。

提示

  • 由于自签名证书问题,首次访问时,浏览器可能会拦截您的访问,此时需要单击高级,然后单击继续前往192.168.2.33(不安全)即可。本示例基于 Chrome 浏览器,不同浏览器的提示信息不同,请以实际情况为准。

  • 如果浏览器提示无法打开页面,或者报 ERR_INVALID_HTTP_RESPONSE 错误,请确保您使用的 URL 前缀为 https://,而非 http://。

4. 在登录页面,输入登录账号和密码,单击 Log In。

    • 登录账号:请根据您在上一步骤中传入的 KEYCLOAK_USER 参数值输入,本示例的登录账号为 admin。
    • 密码:请根据您在上一步骤中传入的 KEYCLOAK_PASSWORD 参数值输入,本示例的密码为 admin。

5. (可选)启用中文界面。

  • 在左侧导航栏单击 Realm Settings,在右侧页面单击 Themes 页签,按照下图顺序进行配置并登出系统以应用配置。

    • 切换一次语言,然后重新登录 KeyCloak 即可。

6. 在左侧导航栏,单击用户联合,选择 ldap 作为用户数据库。

7. 在添加用户联合提供程序页面,根据下图顺序进行配置。

8. 单击保存后,页面上方提示 Success! The provider has been created. 即代表添加成功,单击同步所有用户即可将您 OpenLDAP 中的用户信息同步到 KeyCloak 中。

9. 在左侧导航栏,单击领域设置,右键单击 SAML 元数据另存为 .xml 文件备用。

8. 配置 NineData SSO 登录

前提条件

  • 已创建或加入组织。更多信息,请参见管理组织。

  • NineData 控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织。

  • 您的角色为系统管理员。更多关于角色的信息,请参见角色。

操作步骤

  1. 登录 NineData 控制台,在左侧导航栏单击账户管理>组织信息,根据下图顺序配置 SSO。

2. 用管理员账户(本示例的账号密码:admin/admin)登录 KeyCloak,在左侧导航栏单击客户端,并在页面右上角单击创建。

3. 在添加客户端页面,单击选择文件,导入 NineData 控制台中下载的 .xml 元数据文件(步骤 1 中的序号 5),单击保存后自动跳转到当前客户端的配置页,找到并关闭需要客户端签名的开关,滚动页面至底部,单击保存。

4. 在左侧导航栏,单击账户管理>组织信息,复制页面中的组织登录直达地址提供给对应用户即可。该用户通过自身的账号登录 KeyCloak 即可登录 NineData。

9. 用户通过 SSO 登录 NineData

前提条件

用户已从管理员处获取了组织登录直达地址。

操作步骤

1. 在浏览器中访问管理员提供的组织登录直达地址,页面自动跳转至 KeyCloak 登录页。

2. 输入用户名和密码,单击登录即可跳转至 NineData 控制台。

提示:该用户名和密码即管理员在 OpenLDAP 中录入的用户信息,录入方式请参见添加组织和用户。

3. 新用户登录 NineData 需要根据页面提示完善个人信息才可继续使用。