ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

LLDAP 与 Gitea/Forgejo 集成指南:BindDN、Simple Auth 与组织团队同步配置详解

LLDAP 与 Gitea/Forgejo 集成指南:BindDN、Simple Auth 与组织团队同步配置详解 后端认证鉴权【免费下载链接】lldapLight LDAP implementation项目地址https://gitcode.com/gh_mirrors/ll/lldap点击查看免费下载LLDAP 是一个轻量级的 LDAP 认证服务器默认将所有用户组织在oupeople下、所有组组织在ougroups下并原生支持memberOf过滤因此非常适合作为 Gitea 或 Forgejo 的外部认证源。本文以仓库中的 example_configs/gitea.md 为基础完整讲解在 Gitea 中配置「LDAP (via BindDN)」认证源、实现用户名或邮箱登录、将 LLDAP 组同步为组织团队以及使用simple auth模式的完整方案同时结合 LLDAP 的 LDAP 服务端实现源码说明每个配置项背后的属性映射与过滤机制帮助你一次配置到位并能够自行排查问题。集成前需要确认的 LLDAP 事实在动手配置 Gitea 之前先对齐几个与本次集成直接相关的 LLDAP 默认行为它们决定了下面所有 DN 与过滤器的写法LDAP 监听端口默认3890由 server/src/configuration.rs 中ldap_port的默认值定义也与 lldap_config.docker_template.toml 中的模板注释一致。如果你修改过ldap_portGitea 里要填实际值。Base DN 默认为dcexample,dccom定义于 server/src/configuration.rs。所有示例 DN 都必须把它替换成你在 LLDAP 配置里设置的ldap_base_dn。用户全部位于oupeople之下LLDAP 中用户bob的 DN 是uidbob,oupeople,dcexample,dccom这一点在 README 的 通用配置指南 中有明确说明并在 crates/ldap/src/core/user.rs 的搜索条目构造代码中体现。组全部位于ougroups之下组git_user的 DN 是cngit_user,ougroups,dcexample,dccom见 crates/ldap/src/core/group.rs 的 DN 拼接逻辑。memberOf过滤原生可用LLDAP 会在用户条目上返回其所属组的完整 DN见 crates/ldap/src/core/user.rs因此 Gitea 的用户过滤器里可以直接使用(memberOf...)。默认管理组是lldap_admin属于该组的用户在 LLDAP Web 界面拥有管理员权限。Gitea 的 Admin Filter 想映射管理权限时应匹配这个组的 DN。第一步在 Gitea 中添加 BindDN 认证源在 Gitea 中依次进入站点管理Site Administration 认证源Authentication Sources点击添加认证源Add Authentication Source选择认证类型为LDAP (via BindDN)。BindDN 模式的工作方式是Gitea 先用自己的 Bind DN 与 Bind Password 在 LLDAP 上做一次绑定相当于登录验证随后以该绑定身份执行用户搜索用户实际登录时Gitea 再用用户提交的凭证尝试绑定。因此Bind DN 必须是在 LLDAP 中真实存在、且有权搜索用户的账号。连接参数配置项填写值说明Host你的 LLDAP 服务器 IP 或主机名若 Gitea 与 LLDAP 部署在同一 Docker 网络可填 LLDAP 容器名Port3890LLDAP 默认 LDAP 端口若启用了 LDAPS默认端口6360这里应填对应端口并改用 LDAPS 协议Bind DNuidadmin,oupeople,dcexample,dccom即 LLDAP 的管理员账号 DNadmin是 configuration.rs 中ldap_user_dn的默认值Bind Password该绑定用户的密码与登录 LLDAP Web 界面的密码一致即ldap_user_pass按dcexample,dccom替换为你的ldap_base_dn。需要提醒的是官方集成指南见 README 的客户端配置说明建议对于只做认证的第三方服务优先使用lldap_strict_readonly或lldap_password_manager组中的专用账号作为 Bind DN而不是把 LLDAP 的完整管理账号暴露给多个服务避免第三方服务获得过大的管理面。搜索范围配置项填写值说明User Search Baseoupeople,dcexample,dccomLLDAP 的所有用户都在这棵子树下User Filter见下文「用户过滤器」决定哪些用户允许登录用户过滤器控制谁能登录 Gitea原指南提供了两个层次的过滤器两者的公共部分是((objectClassperson)(|(uid%[1]s)(mail%[1]s)))objectClassperson确保匹配到的是真正的用户条目。从 crates/ldap/src/core/user.rs 可以看出LLDAP 用户默认携带inetOrgPerson、posixAccount、mailAccount、person这四类 objectClass因此该条件恒为真起到标准的防护性检查作用。|(uid%[1]s)(mail%[1]s)%[1]s是 Gitea 的占位符代表用户登录时输入的用户名/邮箱。LLDAP 在 crates/ldap/src/core/user.rs 中把uid等值过滤映射为用户 ID、把mail映射为邮箱小写比较所以这个或条件能让用户既可以用用户名、也可以用邮箱地址登录。场景一允许所有用户登录((objectClassperson)(|(uid%[1]s)(mail%[1]s)))场景二仅允许某个组的成员登录以组git_user为例((memberofcngit_user,ougroups,dcexample,dccom)(|(uid%[1]s)(mail%[1]s)))其中memberof条件的值必须是该组在 LLDAP 中的完整 DN。LLDAP 对memberOf等值过滤的解析位于 crates/ldap/src/core/user.rs它会把过滤器值解析为组 DN 后转换为成员关系查询crates/ldap/src/core/user.rs 的test_search_member_of测试用例验证了memberOf返回cnrockstars,ougroups,dcexample,dccom这一格式即组 DN 由显示名拼接ougroups与 base DN 构成。注意事项LDAP 过滤器中的属性名是大小写不敏感的LLDAP 在解析时会统一转小写比较memberof与memberOf写法等价但 DN 本身的大小写需要与 LLDAP 中实际创建的名称一致。配置完成后保存认证源用户应能立即用用户名或邮箱登录 Gitea。Admin Filter把 LLDAP 管理员映射为 Gitea 管理员若希望 LLDAP 的管理员自动成为 Gitea 管理员填写(memberofcnlldap_admin,ougroups,dcexample,dccom)lldap_admin是 LLDAP 内置的默认管理员组README 在 通用配置指南 中说明任何属于该组的用户在 Web UI 中拥有管理员权限。如果不希望同步管理员将此字段留空即可。属性映射让 Gitea 正确读取用户资料以下属性映射直接把 LLDAP 的用户字段对应到 Gitea 需要的账户信息Gitea 配置项填写值LLDAP 对应实现Username Attributeuid用户登录名LLDAP 的uid字段First Name AttributegivenName用户名属性来自 LLDAP 的givenName或自定义的first_name见 app/src/components/user_details_form.rs 相关表单逻辑Surname Attributesn用户姓属性Email Attributemail用户邮箱LLDAP 的mail字段Avatar AttributejpegPhoto用户头像JPEG 照片属性这些标准属性都在 crates/ldap/src/core/user.rs 声明的ALL_USER_ATTRIBUTE_KEYS白名单内uid、mail、givenname、sn、cn、jpegPhoto等因此 Gitea 搜索用户时能够直接取到。值得说明的是cn显示名在 LLDAP 中映射为displayName见 crates/ldap/src/core/user.rs。最后勾选启用用户同步Enable User SynchronizationGitea 会周期性拉取 LLDAP 的用户列表让新用户无需在 Gitea 侧手动创建即可被识别。进阶将 LLDAP 组同步为组织团队在完成基本认证后可以让 LLDAP 的组自动同步为 Gitea 组织中的团队。前提是组织和团队必须在 Gitea 中手工创建LLDAP 只负责把组成员关系映射过去一个 LLDAP 组可以映射到同一组织内的多个团队。勾选启用 LDAP 组Enable LDAP Groups然后按如下填写配置项填写值说明Group Search Base DNougroups,dcexample,dccomLLDAP 的所有组都在这棵子树下Group Attribute Containing List Of Usersmember组条目上保存成员列表的属性名。LLDAP 组默认携带member与uniqueMember两个成员属性见 crates/ldap/src/core/group.rs 与 crates/ldap/src/core/group.rs成员值是该用户的完整 DN形如uidbob,oupeople,dcexample,dccomUser Attribute Listed In Groupdn表示组内成员值对应的是用户的 DN 属性Map LDAP groups to Organization teamsJSON 映射见下指定哪个 LLDAP 组同步到哪个组织的哪些团队组到团队的 JSON 映射格式{cnGroupname1,ougroups,dcexample,dccom:{Organization1: [Teamname]},cnGroupname2,ougroups,dcexample,dccom: {Organization2: [Teamname1, Teamname2]}}该配置是标准 JSON 对象键为 LLDAP 组的完整 DN值为「组织名 → 团队名数组」的映射。可以按需扩展到任意数量的组一个组可映射多个组织一个组织内可映射多个团队。然后勾选从已同步团队中移除用户...Remove Users from syncronised teams...这样当用户被移出 LLDAP 组后其在 Gitea 对应团队中的成员资格也会被移除保证两侧成员关系一致。同样记得把映射中所有dcexample,dccom替换为你的实际 base DN。提示组 DN 的格式在 crates/ldap/src/core/group.rs 中固定为cn显示名,ougroups,base DN因此映射键必须与 LLDAP 中实际的组名完全一致包括大小写。备选方案Gitea 的simple auth匿名绑定模式如果不想维护一个专用的 Bind 账号可以使用 Gitea 的LDAP (via simple auth)认证方式配置要点如下配置方法与 BindDN 模式完全相同Host、Port、User Search Base、User Filter、属性映射等字段一致不需要填写 Bind DN 与 Bind Password——Gitea 将直接用用户提交的凭证去 LLDAP 做绑定代价是 Gitea无法预先同步用户用户账号会在首次登录时自动创建。也就是说simple auth 模式适合按需创建账号的场景而 BindDN 模式由于拥有独立绑定身份可以主动搜索和同步用户适合需要预先建号或批量同步的组织。验证与常见问题排查确认端口可达先确认 LLDAP 的ldap_port默认3890在防火墙/容器网络中对 Gitea 开放若 LLDAP 运行在容器中参考 lldap_config.docker_template.toml 中的ldap_host说明设置为0.0.0.0才能让外部连接进入。校验 DN 拼写所有 DN 都是uid用户名/cn组名oupeople/ougroups base DN 的拼接结果逐段核对特别注意dcexample,dccom是否已全部替换。用测试用户登录按上述 User Filter 配置后用用户名和邮箱两种形式各试一次LLDAP 对uid与mail的匹配在 crates/ldap/src/core/user.rs 中均做了大小写归一处理。开启详细日志若登录失败可在 LLDAP 配置中打开verbosetrue见 lldap_config.docker_template.toml结合 Gitea 的认证源日志定位是绑定失败、搜索失败还是过滤器未命中。README 在 已知兼容服务 一节也建议遇到新服务不兼容时携带服务日志与 LLDAP 详细日志提交 issue。组同步未生效确认勾选了Enable LDAP Groups与Remove Users from syncronised teams...并核对 JSON 中组 DN 与实际组名完全一致Gitea 侧的同步是周期性的刚保存配置后可能需要等待下一轮同步。小结通过本文的配置你可以完成三件事让 Gitea或 Forgejo用户使用 LLDAP 中的用户名或邮箱登录按组粒度控制哪些人能登录、哪些人能成为 Gitea 管理员把 LLDAP 的组成员关系持续同步到组织团队。整个过程的关键在于理解 LLDAP 的目录结构约定oupeople/ougroups base DN与其标准属性uid、mail、givenName、sn、jpegPhoto、memberOf、member这些约定都可以在 crates/ldap/src/core/user.rs 与 crates/ldap/src/core/group.rs 的源码和测试中得到印证。若需要配置其他服务的 LDAP 集成可参考仓库 example_configs 目录下的大量分服务示例或先阅读 README 的 通用配置指南 建立整体认知。赞分享后端认证鉴权【免费下载链接】lldapLight LDAP implementation项目地址https://gitcode.com/gh_mirrors/ll/lldap点击查看免费下载相关推荐Gitea组织管理企业级团队架构Gitea组织管理企业级团队架构 痛点传统Git托管平台的团队协作困境 你是否曾面临这样的困境团队规模扩大后代码仓库权限管理变得混乱不堪不同项目组需要后端代码托管版本控制研发协作代码评审缺陷追踪项目管理CI/CDHive 项目 SerpAPI 工具实战指南用 MCP 工具打通 Google Scholar 与 Google Patents 学术检索Hive 项目 SerpAPI 工具实战指南用 MCP 工具打通 Google Scholar 与 Google Patents 学术检索 导读 本文围绕 H后端认证鉴权LLDAP 与 Proxmox VE 集成指南LDAP 认证同步、Realm 配置与 ACL 权限实战LLDAP 与 Proxmox VE 集成指南LDAP 认证同步、Realm 配置与 ACL 权限实战 本指南以 LLDAPLight LDAP imple后端认证鉴权上一篇如何实现Universal Android Debloater的自更新功能完整指南下一篇Mitro 交易客户端新手指南4步交易策略控住滑点、读懂行情不翻车创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表