
ahaen/azuread-ldap-wrapperAzureAD-LDAP-wrapper是一个基于Node.js的LDAP服务器(构建于ldapjs之上),允许通过LDAP协议访问Azure Active Directory中的用户和组。用户认证在每次登录尝试时通过Microsoft Graph API执行。这使得其他应用程序能够连接到LDAP服务器并使用AzureAD登录凭据,使其成为缺乏AzureAD支持的旧应用程序或不需要管理本地AD控制器场景的可能解决方案。
AzureAD-LDAP-wrapper启动一个LDAP服务器,并从AAD Graph API获取用户和组信息。这些信息会被缓存并在本地合并。
当LDAP客户端尝试使用用户凭据进行绑定(bind)时,AzureAD-LDAP-wrapper通过与AAD Graph API通信来检查这些凭据。如果凭据有效,AAD Graph API会向AzureAD-LDAP-wrapper发送成功响应,然后AzureAD-LDAP-wrapper向用户的LDAP客户端发送成功绑定消息。此外,AzureAD-LDAP-wrapper会将用户的密码哈希保存在sambaNTPassword属性中,并将sambaPwdLastSet属性设置为“当前时间”。这允许用户从Windows电脑访问Samba共享(如NAS上的共享)。
AzureAD-LDAP-wrapper每30分钟定期从AAD Graph API获取用户和组信息,合并结果并在本地缓存。此过程会保留uid、gid、sambaNTPassword和sambaPwdLastSet等属性。
使用AzureAD-LDAP-wrapper需要:
一个Azure Active Directory (AD)租户,至少包含一个已注册用户。
在租户中注册的Azure AD应用程序,具有以下权限:
User.Read.All和Group.Read.All权限。User.Read权限。您可以按照安装指南中的说明设置应用程序。
运行AzureAD-LDAP-wrapper需要准备租户ID(Tenant ID)、应用ID(Application ID)和应用密钥(Application Secret)。这些值用于认证和授权应用程序访问Azure AD资源,可在Azure门户中找到。
创建Azure AD应用程序后,可以在本地计算机、服务器甚至Synology NAS上运行LDAP包装器。根据设置,您需要:
或
注意,包装器的某些功能可能需要额外的配置或依赖项,例如用于网络存储访问的NAS。
有多种运行LDAP包装器的方式。有关更多信息,请查阅文档以开始使用。
在Synology NAS上运行LDAP包装器的一种方法如下:
从Synology套件中心安装Docker。 !套件中心
在Docker中,转到“注册表”下载最新的容器镜像。 !下载最新镜像
在Docker中,转到“映像”启动新容器。使用“bridge”作为网络。 !启动映像 使用“bridge”作为网络。
为容器命名并启用自动重启。 !名称设置
在“高级设置”中配置环境变量。确保仔细检查Azure相关值,并至少定义一个绑定用户(binduser)。绑定用户(如root等超级用户)不需要存在于AzureAD中。将example.com替换为您的域名。以下是最小所需配置示例:
bashTZ: "Europe/Zurich" # 可选 AZURE_TENANTID: "0def2345-ff01-56789-1234-ab9d6dda1e1e" AZURE_APP_ID: "abc***-ab01-0000-1111-a1e1eab9d6dd" AZURE_APP_SECRET: "iamasecret~yep-reallyreallysecret" LDAP_DOMAIN: "example.com" LDAP_BASEDN: "dc=example,dc=com" LDAP_BINDUSER: "ldapsearch|*secretldapsearch123*||root|*secretroot*" LDAP_DEBUG: "false" # 设置为true以获取更多日志 GRAPH_IGNORE_MFA_ERRORS: "false" # 设置为true以绕过MFA DSM7: "true" # 如果运行DSM 6或更低版本,设置为false
!环境变量 所有环境变量的完整列表可在配置设置页面找到。
将本地端口389映射到容器端口***。如果收到“本地端口389与其他服务冲突”的错误,请确保未安装Synology Directory Service和Synology LDAP Server,它们也使用此端口。 !端口设置
在卷设置中,将本地文件夹(如docker/ldap)挂载到路径/app/.cache。如果跳过此步骤,数据将不会永久存储。 !文件夹挂载
点击“完成”启动容器。 !完成设置
要允许用户使用Azure凭据登录Synology NAS,需要将NAS连接到AzureAD-LDAP-wrapper。步骤如下:
进入控制面板 > 域/LDAP,点击“加入”。 !LDAP加入
输入NAS的IP地址(如127.0.0.1)作为服务器地址。 !服务器地址
输入先前定义的超级用户凭据(环境变量LDAP_BINDUSER)作为绑定DN(Bind DN)。如果用户未找到,尝试使用“uid=root”或完整名称“uid=root,cn=users,dc=domain,dc=tld”而非仅“root”。在Base DN中选择您的域。
!输入LDAP信息
如果看到关于本地组与同步组名称相同的警告,可以忽略并在“详情”中跳过警告。 !跳过警告
NAS现在应已成功连接到Azure AD LDAP包装器。 !NAS已连接
检查“LDAP用户”和“LDAP组”选项卡,确保所有条目已完全同步。为同步的用户和组分配所需权限。现在可以使用Azure AD凭据登录。 !检查用户
注意,在通过网络或Samba访问共享文件夹或文件之前,每个用户必须先登录DSM Web GUI或其他直接连接到LDAP服务器的工具。密码更改后也需要执行此步骤,因为Samba的密码哈希仅在成功登录后设置。
配置LDAP包装器可使用环境变量(因为其设计用于Docker)。所有可用变量的完整列表可在文档的配置设置页面找到。
如果遇到任何问题,首先检查Docker日志。许多错误会记录在日志中,有助于识别问题根源。此外,文档的故障排除页面提供了调试常见问题(包括Samba相关问题)的进一步指导。如果仍无法解决,请提交issue并附上相关日志文件以帮助诊断。
请注意,AzureAD-LDAP-wrapper涉及敏感用户信息的传输,因此确保安全使用至关重要。使用此包装器时存在一些潜在安全风险。有关这些风险及缓解措施的更多信息,请阅读文档的安全页面。
如果发现任何安全漏洞,请参考SECURITY.md中的说明进行报告。
欢迎对AzureAD-LDAP-wrapper做出贡献!如有任何建议、错误报告或拉取请求,请随时在项目的GitHub仓库上提交issue或拉取请求。
如果您发现此项目有帮助或为您节省了时间和精力,请考虑给予星标(star)和/或***。
您的支持有助于我维护和改进此项目。谢谢!
AzureAD-LDAP-wrapper采用MIT许可证授权。


manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务