
后端认证鉴权【免费下载链接】lldapLight LDAP implementation项目地址https://gitcode.com/gh_mirrors/ll/lldap点击查看免费下载本篇指南讲解如何在 OpenCloudGo 编写的轻量级文件托管 / WebDAV 服务fork 自 ownCloud Infinite Scale中停用其内置 LDAP 服务并将底层目录换成 LLDAP从而复用 LLDAP 的用户与组体系。读完本文你将掌握 OpenCloud 全套OC_LDAP_*环境变量的含义与取值能够独立完成从 LLDAP 侧准备 bind 用户、到 OpenCloud 侧落地配置、再到登录过滤与权限边界验证的完整实战流程。OpenCloud 与 LLDAP 的集成思路OpenCloud 是一个用 Go 编写的轻量级文件托管 / WebDAV 服务它是 ownCloud Infinite ScaleoCIS的一个分支。与 oCIS 类似OpenCloud 自带一个 OIDC 身份提供者IdP和一个内置 LDAP 服务器并且官方支持接入第三方 OIDC 提供者。本示例配置走的是一条更精细的路径保留 OpenCloud 自身的通用认证 / OIDC 基础设施不动只把其底层的 LDAP 服务器替换为 LLDAP。这样 OpenCloud 的前端登录、OIDC 流程仍然由它自己负责而用户、密码、组的存储与查询全部落到 LLDAP 上。由于集成完全通过环境变量完成无需修改 OpenCloud 镜像或源码配置既轻量又可复现。仓库中与本主题直接相关的姊妹篇 OCIS 集成示例 也采用了同样的思路OCIS_EXCLUDE_RUN_SERVICES: idmOCIS_LDAP_*变量OpenCloud 的变量命名与其一脉相承可作为对照参考。前置准备LLDAP 侧的基础设施在配置 OpenCloud 之前需要确认 LLDAP 侧已具备以下前提其中大部分都对应 LLDAP 的默认值项默认值 / 建议依据LDAP 监听地址0.0.0.0容器外可达需显式设置端口默认3890server/src/configuration.rsBase DNdcexample,dccom可在配置中任意扩展server/src/configuration.rs用户目录 DNoupeople,dcexample,dccomLLDAP 目录结构约定组目录 DNougroups,dcexample,dccomLLDAP 目录结构约定LLDAP 自身的配置通过 TOML 文件或LLDAP_前缀环境变量完成见 lldap_config.docker_template.toml其中ldap_base_dn、ldap_port分别对应LLDAP_LDAP_BASE_DN、LLDAP_LDAP_PORT。只要 LLDAP 与 OpenCloud 处于同一网络且ldap_host允许外部连接OpenCloud 即可通过ldap://lldap_ip:3890访问。创建专用 bind 用户OpenCloud 需要一个 LDAP bind 用户来执行搜索与绑定。强烈建议不要直接使用 LLDAP 的admin账号而是创建一个专用服务账号例如bind_user并把它加入 LLDAP 的lldap_strict_readonly组。lldap_strict_readonly是 LLDAP 内建的特殊权限组。从 crates/access-control/src/lib.rs 的权限解析逻辑可以看到LLDAP 按成员身份确定权限等级permission: if is_in_group(lldap_admin.into()) { Permission::Admin } else if is_in_group(lldap_password_manager.into()) { Permission::PasswordManager } else if is_in_group(lldap_strict_readonly.into()) { Permission::Readonly } else { Permission::Regular },即lldap_adminlldap_password_managerlldap_strict_readonly 普通用户。处于lldap_strict_readonly组的 bind 用户可以执行目录查询但不能修改他人密码、不能执行管理操作适合作为对外暴露凭据的服务账号。这正是后面OC_LDAP_SERVER_WRITE_ENABLED取值判断的关键如果 bind 用户属于lldap_strict_readonly则 OpenCloud 侧必须声明只读。配置注入方式环境变量OpenCloud 的所有 LDAP 集成项均通过环境变量配置本示例采用的是 dotenv 风格的键值对在 FreeBSD 上这些变量由/usr/local/etc/opencloud/config.env提供在 Linux 上可以在 Docker / Docker Compose 的environment:段中直接注入。仓库的 OpenCloud 示例配置 即以此形式给出下面的讲解将以它为骨架逐项展开。环境变量逐项详解连接与传输安全# Replace with actual IP and Port OC_LDAP_URIldap://lldap_ip:3890 # Remove the following if you use LDAPS and your cert is not self-signed OC_LDAP_INSECUREtrueOC_LDAP_URILDAP 服务器地址。默认明文 LDAP 走3890端口正好对应 LLDAP 的默认监听端口 server/src/configuration.rs。若 LLDAP 配置了 LDAPS[ldaps_options]默认端口6360见 lldap_config.docker_template.toml则写成ldaps://...。OC_LDAP_INSECURE是否跳过对 LDAP 服务器证书的校验。当使用明文 LDAP、或使用自签名证书的 LDAPS 时设为true若你的 LDAPS 证书由受信任 CA 签发可移除该项。bind 身份# Replace with your bind-user; can be in OC_LDAP_BIND_DNcnbind_user,oupeople,dcexample,dccom OC_LDAP_BIND_PASSWORDsecretOC_LDAP_BIND_DNbind 用户的完整 DN。LLDAP 的目录中用户一律挂在oupeople之下命名属性为cn因此形如cnbind_user,oupeople,dcexample,dccom。这与 LLDAP 默认 admin 用户的 DN 结构cnadmin,oupeople,dcexample,dccom完全一致。OC_LDAP_BIND_PASSWORDbind 用户的密码。目录范围与 ID 属性OC_LDAP_GROUP_BASE_DNougroups,dcexample,dccom OC_LDAP_GROUP_SCHEMA_IDentryuuid OC_LDAP_USER_BASE_DNoupeople,dcexample,dccom OC_LDAP_USER_SCHEMA_IDentryuuidOC_LDAP_USER_BASE_DN/OC_LDAP_GROUP_BASE_DN搜索用户与组的子树根 DN分别对应 LLDAP 的oupeople与ougroups目录。OC_LDAP_USER_SCHEMA_ID/OC_LDAP_GROUP_SCHEMA_IDOpenCloud 用来充当对象唯一 ID 的 LDAP 属性统一取entryuuid。LLDAP 为每个用户、组都生成 UUID 作为主键内部以uuid属性承载并以entryUUID作为符合 RFC 标准的对外属性名对外暴露。该做法在姊妹篇 OCIS 集成示例 中同样出现OCIS_LDAP_USER_SCHEMA_ID: entryuuid说明这是两代产品的通用约定用稳定不变的 UUID 作为身份锚点避免把会变的uid/cn当作主键。登录范围过滤可选# Only allow users from specific group to login; remove this if everyones allowed OC_LDAP_USER_FILTER((objectClassperson)(memberOfcnopencloud_users,ougroups,dcexample,dccom))OC_LDAP_USER_FILTER限定哪些用户可以登录 OpenCloud。上面的过滤器要求用户同时满足两个条件具有objectClassperson且其memberOf属性包含cnopencloud_users,ougroups,dcexample,dccom这个组。LLDAP 在服务 LDAP 查询时会根据目录结构生成memberOf关系因此这一过滤器可以直接复用 LLDAP 中已建好的组例如在 LLDAP 里创建一个名为opencloud_users的组并加入成员。若不做任何限制删除该行即可让所有 LLDAP 用户登录。注意值中的引号整行使用单引号包裹内部使用双引号这是 dotenv / shell 环境中保证 LDAP 过滤器字符串正确传递的标准写法。用户禁用机制未测试项# Other options have not been tested OC_LDAP_DISABLE_USER_MECHANISMnoneOC_LDAP_DISABLE_USER_MECHANISM控制 OpenCloud 如何识别已禁用用户。示例中取none即不启用禁用机制。原文档明确标注Other options have not been tested因此除none之外的其他取值例如基于组的禁用机制在 LLDAP 场景下没有经过验证按原样保留即可不要贸然改动。写权限开关# If you bind-user is in lldap_strict_readonly set to false (this hides forgot password-buttons) OC_LDAP_SERVER_WRITE_ENABLEDfalse # If your bind-user can change passwords: OC_LDAP_SERVER_WRITE_ENABLEDtrue # Not tested, yet!OC_LDAP_SERVER_WRITE_ENABLED决定 OpenCloud 是否认为自己可以对 LDAP 目录执行写操作例如改密码、改属性。两个取值需要结合 LLDAP 的权限模型来选择false推荐且经过验证当 bind 用户属于lldap_strict_readonly组时它在 LLDAP 侧只有只读权限crates/access-control/src/lib.rs因此 OpenCloud 必须以只读模式接入。原文档特别指出设置为false时OpenCloud 界面会隐藏忘记密码forgot password按钮——这是避免用户走一个注定失败的密码重置流程的合理行为。true未测试仅当你的 bind 用户具备改密能力例如属于lldap_password_manager组时才应考虑。原文档明确标注Not tested, yet!即该组合在 LLDAP OpenCloud 场景下尚未得到验证生产环境慎用。停用内置 LDAP# Dont start built-in LDAP, because its replaced by LLDAP OC_EXCLUDE_RUN_SERVICESidmOC_EXCLUDE_RUN_SERVICESidm是本次替换的核心开关它让 OpenCloud 不再启动自己内置的 LDAP / 身份管理服务idm从而彻底把目录职责移交给 LLDAP。对照 OCIS 集成示例 中的OCIS_EXCLUDE_RUN_SERVICES: idm可见这是该技术路线的标准动作。完整配置示例将以上全部变量整合后即得到开箱即用的完整配置来自 example_configs/opencloud.md# Replace with actual IP and Port OC_LDAP_URIldap://lldap_ip:3890 # Remove the following if you use LDAPS and your cert is not self-signed OC_LDAP_INSECUREtrue # Replace with your bind-user; can be in OC_LDAP_BIND_DNcnbind_user,oupeople,dcexample,dccom OC_LDAP_BIND_PASSWORDsecret OC_LDAP_GROUP_BASE_DNougroups,dcexample,dccom OC_LDAP_GROUP_SCHEMA_IDentryuuid OC_LDAP_USER_BASE_DNoupeople,dcexample,dccom OC_LDAP_USER_SCHEMA_IDentryuuid # Only allow users from specific group to login; remove this if everyones allowed OC_LDAP_USER_FILTER((objectClassperson)(memberOfcnopencloud_users,ougroups,dcexample,dccom)) # Other options have not been tested OC_LDAP_DISABLE_USER_MECHANISMnone # If you bind-user is in lldap_strict_readonly set to false (this hides forgot password-buttons) OC_LDAP_SERVER_WRITE_ENABLEDfalse # If your bind-user can change passwords: OC_LDAP_SERVER_WRITE_ENABLEDtrue # Not tested, yet! # Dont start built-in LDAP, because its replaced by LLDAP OC_EXCLUDE_RUN_SERVICESidm部署时替换五个占位符即可lldap_ipLLDAP 容器或主机的 IP、bind_userbind 用户名、secretbind 密码、opencloud_users限定登录的组名。在 Docker Compose 中把这些键值放入服务的environment:段或写入 FreeBSD 的/usr/local/etc/opencloud/config.env后重启 OpenCloud。权限边界与已知限制OpenCloud 目前没有文档化的方式给 LDAP 用户或组授予管理员权限。这意味着即使 LLDAP 侧将该用户放入lldap_admin组OpenCloud 也无法据此识别其管理员身份管理员权限仍需通过 OpenCloud 自己的机制授予。这是接入前需要明确的预期管理。OC_LDAP_SERVER_WRITE_ENABLEDtrue与OC_LDAP_DISABLE_USER_MECHANISM的非none取值均未测试不要在生产环境未经验证地启用。bind 用户建议锁定在lldap_strict_readonly组配合OC_LDAP_SERVER_WRITE_ENABLEDfalse形成最小权限闭环同时它能隐藏 OpenCloud 界面上无意义的忘记密码入口。该组由 LLDAP 在首次启动时自动创建见 server/src/main.rs 中对lldap_strict_readonly的引导逻辑无需手工建组。验证与排障思路配置完成后可按以下顺序验证整条链路是否打通验证 LLDAP 侧目录可达从 OpenCloud 所在主机确认ldap://lldap_ip:3890端口可达且OC_LDAP_BIND_DN对应的用户能正常绑定。检查 OpenCloud 日志若启动后用户列表为空或登录失败重点核对OC_LDAP_USER_BASE_DN/OC_LDAP_GROUP_BASE_DN是否与 LLDAP 的ldap_base_dn默认dcexample,dccom一致以及OC_LDAP_USER_FILTER中的组名是否真实存在于 LLDAP。验证登录过滤分别用过滤组内、组外的用户尝试登录确认memberOf过滤按预期生效。确认内置 LDAP 已停用OC_EXCLUDE_RUN_SERVICESidm生效后OpenCloud 不应再监听自己的 LDAP 端口所有目录请求应落到 LLDAP 上。如需更细的调试信息可参考 OCIS 集成示例 中的同族变量OCIS_LDAP_*、GRAPH_LDAP_SERVER_WRITE_ENABLED等作为对照两者在 schema、过滤、写权限的处理语义上高度一致。关联仓库资源OpenCloud 集成示例本文配置源文件OCISownCloud Infinite Scale集成示例LLDAP 配置模板环境变量说明权限组解析逻辑LLDAP 服务器配置默认值示例配置索引含各客户端接入文档赞分享后端认证鉴权【免费下载链接】lldapLight LDAP implementation项目地址https://gitcode.com/gh_mirrors/ll/lldap点击查看免费下载相关推荐5分钟搞定Swagger UI服务器配置变量替换与多环境适配指南5分钟搞定Swagger UI服务器配置变量替换与多环境适配指南 你是否还在为不同环境下重复配置Swagger UI而烦恼开发、测试、生产环境的API地址切API设计前端文档Woodpecker 环境变量完全指南内置变量参考、全局配置与字符串替换机制Woodpecker 环境变量完全指南内置变量参考、全局配置与字符串替换机制 本篇指南围绕 Woodpecker CI/CD 引擎的 环境变量体系 展开系统CI/CDDevOpsqwerty-learner 保姆级入门免费用打字的方式背单词3 步在本地跑起来qwerty learner 保姆级入门免费用打字的方式背单词3 步在本地跑起来 你有没有这种体验中文敲得飞快可一打英文脑子认识这个词、手指却提笔忘前端教育上一篇Tiled第三方插件推荐提升效率的必备工具下一篇ngxtop日志格式转换工具比较自定义脚本与专用工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考