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

为方便安装和配置,本文使用 Docker 和 Docker 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://:<端口>打开 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。

OpenLDAP接入NineData SSO_第1张图片

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

OpenLDAP接入NineData SSO_第2张图片

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

OpenLDAP接入NineData SSO_第3张图片

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

OpenLDAP接入NineData SSO_第4张图片

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

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

OpenLDAP接入NineData SSO_第5张图片

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

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

OpenLDAP接入NineData SSO_第6张图片

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

OpenLDAP接入NineData SSO_第7张图片

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

OpenLDAP接入NineData SSO_第8张图片

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

OpenLDAP接入NineData SSO_第9张图片

图片

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

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

OpenLDAP接入NineData SSO_第10张图片

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

OpenLDAP接入NineData SSO_第11张图片

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

OpenLDAP接入NineData SSO_第12张图片

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

OpenLDAP接入NineData SSO_第13张图片

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://:<端口> 打开 KeyCloak 欢迎页面(本示例中为https://192.168.2.33:8443),单击 Administration Console 进入登录页面。

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

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

OpenLDAP接入NineData SSO_第14张图片

提示

  • 由于自签名证书问题,首次访问时,浏览器可能会拦截您的访问,此时需要单击高级,然后单击继续前往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 页签,按照下图顺序进行配置并登出系统以应用配置。

OpenLDAP接入NineData SSO_第15张图片

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

OpenLDAP接入NineData SSO_第16张图片

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

OpenLDAP接入NineData SSO_第17张图片

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

OpenLDAP接入NineData SSO_第18张图片

OpenLDAP接入NineData SSO_第19张图片

OpenLDAP接入NineData SSO_第20张图片

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

OpenLDAP接入NineData SSO_第21张图片

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

OpenLDAP接入NineData SSO_第22张图片

8. 配置 NineData SSO 登录

前提条件

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

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

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

操作步骤

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

OpenLDAP接入NineData SSO_第23张图片

OpenLDAP接入NineData SSO_第24张图片

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

OpenLDAP接入NineData SSO_第25张图片

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

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

OpenLDAP接入NineData SSO_第26张图片

9. 用户通过 SSO 登录 NineData

前提条件

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

操作步骤

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

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

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

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

OpenLDAP接入NineData SSO_第27张图片

你可能感兴趣的:(云数据库技术,SQL,开发,数据库,数据库开发,sql,mysql,云计算,安全,dba)