开源OA接入LDAP/AD,企业统一身份认证全攻略
2026-04-20 01:06:44
分类: 开源oa办公系统
tags: 开源oa,ldap,ad域,单点登录,sso,身份认证,企业it,用户管理
字数: 约5300字
---
公司it部门最头疼的事是什么?
排名第一的,十有八九是账号管理。
员工有钉钉账号、oa账号、邮件账号、vpn账号、代码仓库账号……每套系统有独立的用户名密码。
员工离职了,it要挨个系统去注销账号,一个不注意遗漏了,就是安全漏洞。
员工忘记密码了,每套系统都有一套重置流程,it每天光处理"帮我重置密码"的请求就得花半小时。
这个问题的解决方案,叫统一身份认证——用一套账号管理系统(通常是ldap或active directory),让所有系统都读取同一个用户库。用户只需要一个账号,it只需要管理一个地方。
今天来聊怎么让开源oa系统接入企业的ldap/ad,实现统一身份管理。
ldap(轻量级目录访问协议)是一种开放标准的网络协议,用于访问和维护分布式目录信息服务。
简单理解:ldap是一个专门存"谁是谁、谁属于哪个组"信息的数据库,查询速度很快。
active directory(活动目录)是微软在ldap基础上实现的企业级目录服务,windows环境的主流选择。它支持ldap协议,所以很多支持ldap的系统也支持ad。
openldap是开源版本的ldap服务,linux/unix环境下的常用选择。
场景:一家500人的企业,用windows server管理员工账号(ad)。
it希望:
- 员工在oa的登录账号和ad一样,不需要记两套密码
- 员工离职时,只需要在ad里禁用账号,oa自动同步失效
- 新员工入职,ad里创建账号后,oa里自动生成对应用户
这就是ldap/ad集成的核心价值:账号同源,管理统一。
o2oa支持ldap认证,配置方式:
第一步:确认ldap服务器信息
从ad/ldap管理员获取:
- ldap服务器地址(ip或域名)
- ldap端口(标准是389,加密ldaps是636)
- 基础dn(base dn,如 dc=company,dc=com)
- 绑定账号(用于oa查询ldap的服务账号)
- 绑定密码
第二步:修改o2oa配置文件
o2oa的ldap配置通常在系统管理→外部用户集成里,填入服务器信息。
也可以直接修改配置文件(/o2server/configsetting.json),添加ldap配置节:
json
{
"ldapenable": true,
"ldaphost": "192.168.1.100",
"ldapport": 389,
"ldapbasedn": "dc=company,dc=com",
"ldapbinddn": "cn=serviceaccount,dc=company,dc=com",
"ldapbindpassword": "your_password",
"ldapuserfilter": "(objectclass=person)",
"ldapusernameattribute": "samaccountname",
"ldapemailattribute": "mail",
"ldapdisplaynameattribute": "displayname"
}
第三步:测试连接
保存配置后,用一个已知的ad账号测试登录,确认能正常认证。
常见问题:
- 连接超时:检查防火墙是否放通389端口
- 认证失败:检查绑定账号密码是否正确,检查用户filter是否匹配
华炎魔方的文档对ldap集成写得比较清楚,基本步骤类似:
1. 在系统设置里找到"ldap/ad配置"
2. 填入服务器地址、端口、basedn等信息
3. 配置属性映射(ad字段名 ↔ 系统字段名)
4. 保存后测试登录
华炎特有功能:支持设置用户自动同步——每天定时从ad拉取所有用户,自动在系统内创建或更新账号。
如果你的oa是自己开发的,通常会用spring security来做认证。spring security有完整的ldap集成支持:
java
// spring security ldap配置示例
@configuration
public class securityconfig extends websecurityconfigureradapter {
@override
protected void configure(authenticationmanagerbuilder auth) throws exception {
auth
.ldapauthentication()
.userdnpatterns("uid={0},ou=people")
.groupsearchbase("ou=groups")
.contextsource()
.url("ldap://ldap.company.com:389/dc=company,dc=com")
.managerdn("cn=serviceaccount,dc=company,dc=com")
.managerpassword("password")
.and()
.passwordcompare()
.passwordencoder(new bcryptpasswordencoder())
.passwordattribute("userpassword");
}
}
这个是基础配置,实际项目还需要处理用户同步、权限映射等。
ldap只解决了"验证身份"的问题,但用户还是要在每个系统分别登录。
更好的体验是sso(单点登录):用户登录一次,自动登录所有接入的系统。
常见的sso协议:
- saml:老标准,企业级应用广泛支持
- oauth 2.0 + oidc:现代web应用的主流
- cas(中央认证服务):很多高校和企业使用
主流的sso产品:
- keycloak(开源):功能完整,免费,支持ldap/ad,可以发出saml/oidc令牌
- azure ad(微软云):如果已经在用microsoft 365,azure ad sso是最自然的选择
- okta:企业级saas,功能强大但价格较高
推荐方案:keycloak + ldap
keycloak连接到ldap,作为身份中心。所有应用(oa、邮件、代码仓库)都接入keycloak做sso。
这样it只管ad/ldap,keycloak负责sso分发,各应用不需要直接连ldap。
架构:
用户 → keycloak(sso中心)→ ldap/ad(用户库)
↑ ↓
所有系统(oa、邮件、代码仓库…)都信任keycloak颁发的令牌
有了ldap集成,账号管理的标准流程应该是:
入职流程:
1. hr在hris(人力资源系统)录入新员工信息
2. it收到入职通知,在ad里创建账号
3. oa(及其他系统)定时同步ad,自动创建对应账号
4. 员工第一天使用统一账号密码登录所有系统
离职流程:
1. hr在hris更新员工状态为"离职"
2. it在ad里禁用账号
3. 所有接入ldap的系统立即失效(因为ad账号已禁用)
4. 离职手续完成后,彻底删除账号
关键点:账号禁用要当天执行,不能拖延。
普通ldap(端口389)是明文传输,如果oa服务器和ldap服务器之间的网络不安全,账号密码可能被截获。
建议使用ldaps(端口636):传输层加密。
配置步骤:
1. 在ad/ldap服务器上配置ssl证书
2. 将证书导入oa服务器的jvm信任库(如果是java应用)
3. 修改连接配置,使用636端口,启用ssl
java导入证书:
bash
keytool -importcert -file ldap-server.crt \
-keystore $java_home/jre/lib/security/cacerts \
-storepass changeit \
-alias ldap-cert -noprompt
统一身份认证是一个"做了不显眼,不做出问题才后悔"的基础设施。
很多中小企业it团队一直在救火:帮人重置密码、手动注销离职员工账号、追查安全事故……
花2-3天把ldap集成做好,能省掉以后每个月大量重复工作,还能大幅降低账号管理带来的安全风险。
这是值得的投入。
---
发布时间:2026-04-21
关键词:开源oa,ldap,ad域,单点登录,sso,身份认证,企业it

扫一扫
微信客服在线
24小时服务热线
13807814037