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)]