devpi-ldap:为devpi-server提供LDAP身份验证
项目描述
devpi-ldap:为devpi-server提供LDAP身份验证
适用于devpi-server >= 2.1.0。
安装
devpi-ldap 需要与 devpi-server 一起安装。
您可以使用以下命令进行安装
pip install devpi-ldap
对于 devpi-server,无需配置即可激活插件,因为它将通过使用setuptools入口点机制调用钩子自动发现插件。但是,您需要通过命令行选项 --ldap-config 将包含YAML配置文件的路径传递给 devpi-server。
以下是LDAP配置的详细信息。
配置
可以使用名为 devpi-ldap 的脚本来测试您的LDAP配置。
要配置LDAP,创建一个包含以下选项的字典的yaml文件,并在 devpi-ldap 键下创建另一个字典
- url
LDAP服务器的URL。使用ldaps://启用SSL。目前不执行证书验证。
- tls
用于传输层安全(TLS)的ldap3.Tls对象的参数,用于LDAPS连接。
- server_pool
LDAP池服务器的列表。必须选择server_pool或url之一,但不能同时选择。列表条目本身是一个包含必选url项和可选tls项的字典。
- user_template
生成用户唯一名称的模板。如果结构固定,这比指定user_search更快,但devpi-server无法知道用户是否存在。
- user_search
如果您不能或不想使用user_template,那么这是用于用户唯一名称的搜索设置。您可以在搜索过滤器中使用username。具体细节见下文。
- group_search
用于用户组对象的搜索设置。您可以在搜索过滤器中使用username和userdn(唯一名称)。具体细节见下文。
- referrals
是否跟随引用。在使用Windows上的Active Directory通过LDAP时,在许多情况下需要将此设置为false。默认为true。
- reject_as_unknown
将所有失败的认证尝试报告为unknown而不是reject。这在例如使用提供的凭据绑定到ldap时很有用,在这种情况下,我们无法区分认证失败和未知用户。需要unknown以让其他认证钩子尝试认证用户。
- timeout
连接到LDAP服务器的超时时间。默认为10秒。
user_search和group_search设置是包含以下选项的字典
- base
从该基础位置进行搜索。
- filter
搜索过滤器。要使用替换,请将它们放在大括号中。例如:(&(objectClass=group)(member={userdn}))
- scope
搜索范围。有效值是base-object、single-level和whole-subtree。默认为whole-subtree。
- attribute_name
包含用于检查用户密码的用户DN的属性的名称。devpi-ldap将从搜索结果中提取此属性并尝试使用此DN和用户提供的密码绑定到LDAP服务器。如果此绑定成功,则授予访问权限。
- userdn
用于搜索操作的用户唯一名称。对于user_search,如果您没有匿名用户搜索或对于group_search,如果用户不能搜索自己的组,则需要将此设置为具有必要权限的用户。
- password
在userdn中的用户密码。
YAML文件应类似于以下内容
---
devpi-ldap:
url: ldap://example.com
user_template: CN={username},CN=Partition1,DC=Example,DC=COM
group_search:
base: CN=Partition1,DC=Example,DC=COM
filter: (&(objectClass=group)(member={userdn}))
attribute_name: CN
具有用户搜索和Active Directory的示例可能如下所示
---
devpi-ldap:
url: ldap://example.com
user_search:
base: CN=Partition1,DC=Example,DC=COM
filter: (&(objectClass=user)(sAMAccountName={username}))
attribute_name: distinguishedName
group_search:
base: CN=Partition1,DC=Example,DC=COM
filter: (&(objectClass=group)(member={userdn}))
attribute_name: CN
具有服务器池的示例可能如下所示
---
devpi-ldap:
server_pool:
- url: ldap://server1.example.com:389
- url: ldap://server2.example.com:3268
- url: ldaps://server3.example.com:636
tls:
validate: 2 # ssl.CERT_REQUIRED
ca_certs_file: /etc/ssl/certs/ca-certificates.crt
- url: ldaps://server4.example.com:3269
tls:
validate: 2 # ssl.CERT_REQUIRED
ca_certs_file: /etc/ssl/certs/ca-certificates.crt
user_search:
base: CN=Partition1,DC=Example,DC=COM
filter: (&(objectClass=user)(sAMAccountName={username}))
attribute_name: distinguishedName
group_search:
base: CN=Partition1,DC=Example,DC=COM
filter: (&(objectClass=group)(member={userdn}))
attribute_name: CN
变更日志
2.1.1 - 2023-08-07
在调用LDAP search方法之前使用escape_filter_chars。 [mr-scrawley (Micha Schmierer),fschulze]
2.1.0 - 2021-12-04
修复问题#50:新的server_pool设置。
2.0.0 - 2021-05-16
为LDAP连接添加timeout选项。默认为10秒。
使用 safe_load 读取 YAML 配置。
默认情况下,reject_as_unknown 选项现在为 true。
取消对 Python < 3.6 的支持,Python 3.x 的支持将随其各自的 EOL 结束。
修复与 devpi-server 6.0.0 的弃用警告。
修复 pluggy 弃用警告。
至少需要 devpi-server 5.0.0。
1.2.2 - 2018-05-28
更多的 ldap3 2.x 修复。[fschulze]
1.2.1 - 2018-05-25
修复与 ldap3 2.x 的兼容性。[fschulze, abrasive (James Laird-Wah)]
停止使用 Python 2.6 进行测试,但没有进行任何破坏兼容性的更改。
1.2.0 - 2016-03-25
在配置中添加对 TLS 参数的支持。[jaraco (Jason R. Coombs)]
允许通过 python -m devpi-ldap 调用,并修复 Python 3 的 cli。[jaraco]
在身份验证失败时向测试脚本添加退出代码。[jaraco]
1.1.1 - 2016-01-28
设置 ldap3 库的最低版本,该版本添加了在调试日志中隐藏密码的功能。[cannatag (Giovanni Cannata), rodcloutier (Rodrigue Cloutier), fschulze]
更改 ldap 库的依赖关系,该库已被重命名。[kumy]
修复问题 #5:dn 和 distinguishedName 可能会出现在顶级响应属性中,而不是属性列表中。[kainz (Bryon Roché)]
修复问题 #24:忽略额外的搜索结果数据。[bonzani (Patrizio Bonzani), fschulze]
1.1.0 - 2014-11-10
添加 reject_as_unknown 选项。[davidszotten (David Szotten)]
1.0.1 - 2014-10-10
修复插件钩子。[fschulze]
1.0.0 - 2014-09-22
初始发布。[fschulze (Florian Schulze)]