OpenLDAP接入NineData SSO

news2024/11/22 13:32:45

本文面向使用 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://<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 需要根据页面提示完善个人信息才可继续使用。

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1461185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android13 编译ninja failed with: exit status 137

描述 现象很奇怪&#xff0c;主机是ubuntu 18.04&#xff0c; 内存有32G&#xff0c;并且系统中有两份Android13代码&#xff0c; 有一份编译正常&#xff0c;另外一份编译不正常&#xff0c;一度以为是因为下载源码不齐全导致&#xff0c;后面仔细看日志&#xff0c;原来是内…

压缩感知(Compressed Sensing)的MATLAB仿真实现

在前一篇文章&#xff1a;正交匹配追踪&#xff08;Orthogonal Matching Pursuit, OMP&#xff09;的MATLAB实现中&#xff0c;我们介绍了针对稀疏信号进行压缩感知的MATLAB仿真。 本篇我们介绍一下针对的是原始的非稀疏信号&#xff0c;看看如何进行处理。 本文中&#xff0c;…

uniapp运动课程健身打卡系统微信小程序

考虑到实际生活中在我来运动管理方面的需要以及对该系统认真的分析,将系统分为小程序端模块和后台管理员模块&#xff0c;权限按管理员和用户这两类涉及用户划分。 (a) 管理员&#xff1b;管理员使用本系统涉到的功能主要有&#xff1a;首页、个人中心、用户管理、课程类别管理…

计算机设计大赛 深度学习动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

静态时序分析:保持时间分析

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 在静态时序分析中&#xff0c;保持时间检查约束了触发器时钟引脚&#xff08;时钟路径&#xff09;和输入数据引脚&#xff08;数据路径&#xff09;之间的时序关…

虚拟机安装Centos7迷你版

虚拟机安装Centos7迷你版 迷你版较常规版精简了很多功能&#xff0c;所以体积也小了很多&#xff0c;喜欢自定义安装的可以选择迷你版 参考文章&#xff1a; VirtualBox虚拟机安装Centos7详细教程图解 网卡配置参考文章 下载Centos迷你版镜像 安装镜像 下载镜像 阿里云Cen…

【Python】【VS Code】VS Code中python.json和setting.json文件配置说明

目录 1. python.json配置 2. setting.json配置 3. 解决中文乱码 4. 实现效果 1. python.json配置 python.json 获取步骤&#xff1a;文件 -> 首选项 -> 配置用户代码片段 -> python 此为VS Code的头文件设置&#xff0c;复制以下内容到 python.json {"HEADER…

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程

文章目录 1. 写在前面2. 环境搭建2. 加密定位实战 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋友可以关…

如何高效测试APP,快速定位bug?

一般提到测试&#xff0c;很多人会想到考试&#xff0c;但任意一个APP面世之前&#xff0c;也都需要多次测试&#xff0c;确保可以正常使用之后才会面世。有的公司会有专门的测试工程师&#xff0c;而在一般的互联网公司&#xff0c;大多由产品经理、工程师、设计师等兼职&…

vulnhub练习 DC-1复现及分析

一、搭建环境 1.工具 靶机&#xff1a;DC-1 192.168.200.17 攻击机&#xff1a;kali 192.168.200.13 2.注意 攻击机和靶机的网络连接方式要相同&#xff0c;另外DC-1的网络连接方式我这里采用NAT模式&#xff0c;是与kali的网络连接模式相同的&#xff08;当然亦可以选用桥…

unity学习(28)——登录功能

有之前注册的知识&#xff0c;登录就很容易处理了。 登陆成功返回id&#xff1a; 登录失败返回null&#xff1a; 测试同一账号不能重复登陆&#xff01;登录成功后最好可以跳到新的场景中 结果是好的&#xff0c;去服务器看一下对应部分的代码&#xff0c;可见&#xff0c;登…

多端开发围炉夜话

文章目录 一、多端开发 一、多端开发 uni-app 官网 UNI-APP中的UI框架&#xff1a;介绍常用的UI框架及其特点 uView UIVant WeappColor UIMint UI uniapp嵌入android原生开发的功能 uniapp使用安卓原生sdk uni-app中的uni.requireNativePlugin Qt for iOS Qt for Android

Deep Layer Aggregation(CVPR 2018)原理与代码解析

paper&#xff1a;Deep Layer Aggregation official implementation&#xff1a;https://github.com/ucbdrive/dla third-party implementation&#xff1a;https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/dla.py 本文的创新点 骨干网络的设计…

Spring Boot利用Kaptcha生成验证码

生成验证码 我们在登录或注册某个网站的时候&#xff0c;会需要我们输入验证码&#xff0c;才能登录注册&#xff0c;那么如何生成验证码呢&#xff1f;其实&#xff0c;生成验证码我们可以用Java Swing在后台内存里的区域画一个出来&#xff0c;但是非常麻烦&#xff0c;所以…

Linux系统——nginx服务介绍

一、Nginx——高性能的Web服务端 Nginx的高并发性能优于httpd服务 1.nginx概述 Nginx是由1994年毕业于俄罗斯国立莫斯科鲍曼科技大学的同学为俄罗斯rambler.ru公司开发的&#xff0c;开发工作最早从2002年开始&#xff0c;第一次公开发布时间是2004年10月4日&#xff0c;版本…

KubeSphere 镜像构建器(S2I)服务证书过期解决方案

目前 KubeSphere 所有 3.x.x 版本&#xff0c;如果开启了 DevOps 模块并使用了镜像构建器功能&#xff08;S2I&#xff09;都会遇到证书过期问题。 解决方法 已开启 DevOps 模块 下载这个更新 S2I 服务证书压缩包&#xff0c;上传到任一可以访问 K8s 集群的节点&#xff1b; …

Java Web(一)--介绍

Java Web 技术体系图 三大组成部分&#xff1a; 前端&#xff1a; 前端开发技术工具包括三要素&#xff1a;HTML、CSS 和 JavaScript&#xff1b;其他高级的前端框架&#xff0c;如bootstrap、jquery&#xff0c;VUE 等。 后端&#xff1a; 后端开发技术工具主要有&am…

PiflowX-组件UnionAll

UnionAll组件 组件说明 Union多个输入源。输入源必须具有相同的字段类型。 计算引擎 flink 组件分组 common 端口 Inport&#xff1a;Any outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子inportsInports“”无否Inports string are…

Atcoder ABC341 A - Print 341

Print 341&#xff08;输出 341&#xff09; 时间限制&#xff1a;2s 内存限制&#xff1a;1024MB 【原题地址】 所有图片源自Atcoder&#xff0c;题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】 【样例1】 【样例输入1】 …

基于python-socket构建任务服务器(基于socket发送指令创建、停止任务)

在实现ia业务服务器时需要构建一个python-socket客户端&#xff0c;1、要求能与服务器保持心跳连接&#xff0c;每10秒钟发送一次心跳信号&#xff1b;2、要求能根据socket服务器发送的指令创建或终止一个定时任务。 为此以3个类实现该功能&#xff0c;分别为socket通信类&…