GitPuk基础到实践,支持LDAP集成,实现统一认证登录

GitPuk社区版支持LDAP集成,实现与企业统一认证体系的无缝衔接。本文将详解如何配置,让团队成员一键登录,畅通无阻。

1、GitPuk安装与配置

1.1 安装

本文以CentOS操作系统为例。

  • 下载

CentOS安装包下载地址:点击下载gitpuk,点击CentOS下载,下载完成后得到类似tiklab-gitpuk-1.2.0.rpm的文件。

wget -O tiklab-gitpuk-1.2.0.rpm https://install.tiklab.net/app/install/gitpuk/V1.2.0/tiklab-gitpuk-1.2.0.rpm

  • 安装

上传到服务器上,在文件同级目录执行命令安装

rpm -ivh tiklab-gitpuk-1.2.0.rpm

  • 启动

系统默认安装路径为/opt目录,进入/opt/tiklab-gitpuk/bin目录下,执行./gitpuk start即可启动成功。

./gitpuk start

使用 http://ip:9800 进行访问。使用初始用户名密码admin\123456登录。成功登录后显示gitpuk首页。

1.2 配置LDAP登入

配置LDAP登录,首先需要填写LDAP的信息,开启LDAP后即可同步用户信息及登录。

进入系统设置→用户→用户目录需要配置LDAP。

参数说明
AD/LDAP名称Ldap服务名称。
服务器地址安装Ldap服务器的IP地址。
端口号

Ldap服务器启动端口号。

Base DN服务器主域
链接方式LDAP服务器是否使用SSL模式,默认为启动
管理员DNLdap管理员账号,全称包括域
密码管理员密码
类型选择Ldap服务器类型
所属OU节点需要同步的范围,不填默认同步授权的所以组织机构

支持OpenLDAP和Microsoft AD两种类型的LDAP。

  • OpenLDAP

需要输入OpenLDAP名称、服务器地址、端口号、Base DN、是否使用SSL模式、管理员DN、密码、所属OU节点信息。

  • Microsoft AD

需要输入Microsoft AD名称、服务器地址、DC(域)、CN(组织)、用户名、密码信息。

2、LDAP登入

2.1 同步账号

配置成功后点击开启,此时同步数据的按钮会亮起,点击同步数据,就会把LDAP下的用户信息同步到gitpuk。

若配置信息填写错误导致同步数据失败,点击禁止,配置按钮会再次亮起,可以修改配置信息。

2.2 查询LDAP同步用户

1.同步完成后可以点击部门,进行查看同步的部门与用户

2.也可以点击用户进行查看同步完成后LDAP用户,同步过来的人用户目录会显示LDAP

2.3 LDAP用户登入

在登入系统时,可以点击下方的LDAP登入方式进行登入

LDAP(Lightweight Directory Access Protocol)是一种用于访问和维护分布式目录信息服务的协议,常被企业用来实现**统一认证**(Centralized Authentication)和**单点登录**(Single Sign-On, SSO)。下面详细说明如何使用 LDAP 实现这两个目标。 --- ## ✅ 一、LDAP 实现统一认证 ### 🔹 什么是统一认证统一认证是指多个应用系统共用一个用户数据库进行身份验证。LDAP 目录服务(如 OpenLDAP、Microsoft Active Directory)作为中央用户存储库,所有系统都向它验证用户身份。 ### 🔹 实现步骤(以 Node.js + LDAPjs 为例) #### 1. 安装依赖 ```bash npm install ldapjs ``` #### 2. 连接 LDAP 服务器并验证用户 ```javascript const ldap = require('ldapjs'); // 创建客户端连接到 LDAP 服务器(例如 Active Directory 或 OpenLDAP) const client = ldap.createClient({ url: 'ldap://your-ldap-server.com:389' }); function authenticate(username, password) { return new Promise((resolve, reject) => { const userDn = `cn=${username},ou=users,dc=example,dc=com`; // 根据实际 DN 调整 // 尝试绑定(即登录)该用户 client.bind(userDn, password, (err) => { if (err) { console.error('Authentication failed:', err.message); return reject(new Error('Invalid credentials')); } console.log('Authentication successful'); resolve({ username }); }); }); } // 使用示例 app.post('/login', async (req, res) => { const { username, password } = req.body; try { const user = await authenticate(username, password); req.session.user = user; // 写入 session(配合前面讲的 session 方案) res.json({ message: 'Login success' }); } catch (err) { res.status(401).json({ error: 'Authentication failed' }); } }); ``` > ⚠️ 注意: > - `userDn` 需要根据你的 LDAP 目录结构正确构造。 > - 生产环境建议使用 TLS 加密连接:`ldaps://` 或启用 STARTTLS。 --- ## ✅ 二、LDAP 如何支持单点登录(SSO) ### 🔹 什么是单点登录(SSO)? 用户只需登录一次,即可访问多个相互信任的应用系统,无需重复输入用户名密码。 LDAP **本身不直接提供 SSO 功能**,但它可以作为底层认证源,与以下技术结合实现 SSO: | 技术 | 描述 | |------|------| | **Kerberos** | Windows 域环境中基于票据的 SSO 协议,AD 支持 | | **SAML** | 基于 XML 的标准,适用于 Web 应用间 SSO | | **OAuth 2.0 / OpenID Connect** | 现代云应用常用,可集成 LDAP 作为用户源 | | **CAS (Central Authentication Service)** | 开源 SSO 协议,适合 Java/Node 应用 | --- ### 🔹 方案一:LDAP + Kerberos(Windows AD 环境) 在企业内网中,Active Directory 同时支持 LDAP 和 Kerberos。 #### 工作流程: 1. 用户登录 Windows 电脑时通过域账号认证(Kerberos 登录)。 2. 浏览器自动发送 Kerberos 票据给支持 SPNEGO 的 Web 应用。 3. 应用验证票据后完成免密登录(即 SSO)。 ##### 示例代码(Node.js 使用 `kerberos` 模块): ```javascript const kerberos = require('kerberos').Kerberos; app.get('/auth/kerberos', (req, res) => { const authHeader = req.headers['authorization']; if (!authHeader || !authHeader.startsWith('Negotiate ')) { return res.status(401).header('WWW-Authenticate', 'Negotiate').end(); } const ticket = Buffer.from(authHeader.substring(10), 'base64'); kerberos.initializeServer('HTTP@web.example.com', (err, context) => { context.step(ticket, (err, response) => { const username = context.username; // 获取 AD 用户名 req.session.user = { username }; res.json({ message: 'SSO login success', username }); }); }); }); ``` > ✅ 适用场景:企业内部系统、Intranet、IE/Edge/Chrome 支持的域环境。 --- ### 🔹 方案二:LDAP + SAML(跨域 Web SSO) 使用身份提供商(IdP),如 [Shibboleth](https://www.shibboleth.net/) 或 [Keycloak](https://www.keycloak.org/),它们从 LDAP 获取用户信息,并为其他应用提供 SAML 认证。 #### 架构: ``` 用户浏览器 ↓ 应用A → SAML IdP(连接 LDAP) ← 统一用户库 ↓ 应用B → SAML IdP ``` ##### 步骤: 1. 用户访问应用 A。 2. 跳转到 SAML IdP 登录页面(IdP 使用 LDAP 验证)。 3. 登录成功后,IdP 返回 SAML 断言给应用 A。 4. 用户再访问应用 B,自动重定向到 IdP,发现已登录,直接放行。 > ✅ 工具推荐: > - [Passport-SAML](https://github.com/node-saml/passport-saml)(Node.js) > - Keycloak 集成 LDAP 并作为 SAML/OIDC IdP --- ### 🔹 方案三:LDAP + OAuth 2.0 / OpenID Connect(现代方式) 将 LDAP 包装成一个 OAuth 认证服务器。 #### 推荐工具: - **Keycloak**:支持导入 LDAP 用户,对外提供 OIDC/SAML 协议。 - **Auth0 / Okta**:商业平台,支持连接 LDAP/AD。 - **Gluu Server**:开源 IAM 平台。 ##### Keycloak 配置简述: 1. 在 Keycloak 中添加 LDAP 用户存储(指向你的 OpenLDAP 或 AD)。 2. 创建 Client(代表你的应用)。 3. 应用通过 OpenID Connect 协议跳转到 Keycloak 登录。 4. 用户用 LDAP 账号登录,之后获得 ID Token 和 Access Token。 5. 多个应用共享此流程 → 实现 SSO。 --- ## ✅ 三、统一认证 + SSO 架构图(简化版) ``` +------------------+ | LDAP / AD | | (用户集中存储) | +--------+---------+ | | 提供认证 v +------------------------------------------+ | Identity Provider (IdP) | | (如 Keycloak, ADFS, Shibboleth) | | - 支持 SAML / OIDC / Kerberos | +------------------------------------------+ | SSO 登录入口 | 各应用通过标准协议接入 v +------------+ +------------+ +------------+ | App A | | App B | | App C | | (Web/API) | | (Web/API) | | (Desktop) | +------------+ +------------+ +------------+ ``` --- ## ✅ 四、最佳实践建议 | 项目 | 建议 | |------|------| | 安全传输 | 所有 LDAP 通信使用 LDAPS(端口 636)或 STARTTLS | | 用户搜索 | 可先用管理员账号 bind,再 search 用户 DN,最后 bind 验证密码 | | 错误处理 | 不要暴露“用户不存在”或“密码错误”,统一返回“登录失败” | | SSO 部署 | 内网优先考虑 Kerberos;跨域或云环境用 OIDC/SAML | | 高可用 | LDAP 和 IdP 都应部署集群,避免单点故障 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值