我正在努力詹金斯通过我们的活动目录组来验证用户身份。
如果我插入用户,系统会正确查找他们。如果我插入组名,系统则不会找到他们。
编辑:通过反复试验,我发现验证通过团体确实有效也就是说,一旦我将组添加KS-Soft
到列表中,该组中的用户可以登录。然而在输入用户和组名称的列表中,Jenkins 尝试显示用户或组的图标。用户图标显示正确,但组图标始终为错误图标。
因此看起来 Jenkins 可以通过组成员身份对用户进行身份验证,但它无法验证目录中是否存在给定的组名字符串。从技术上来说这可行吗?(也许只是图标显示混乱了。)
Jenkins设置如下:(注意:mydomain
和com
用户名不同,其余都是精确值)
Server : ldap://ks-dc01.mydomain.com:389
root DN : dc=mydomain,dc=com
User Search Base : ou=KSUser
User Search Filter : userPrincipalName={0}
Group search base : ou=KSGroups
Manager DN : CN=Placeholder Martin,OU=Benutzer,OU=KSUser,DC=mydomain,DC=com
Manager Password : *****
通过此设置,我将用户输入[email protected]
到列表中,然后 Jenkins 可以查找该用户,然后我就可以登录。
但是,我无法让 Jenkins 解析组名。我使用广告探索者确认我的组确实如下OU=KSGroups
。
我在这里有一个组,就像CN=KS-Soft
在 AD Explorer 中显示的那样,它有一个member
属性,列出了我感兴趣的所有用户。(用户[电子邮件保护]CN=Placeholder Martin,OU=Benutzer,OU=KSUser,DC=mydomain,DC=com
在此属性中列出。 )
我已经为该组尝试了这些字符串:
KS-Soft
[email protected]
ROLE_KS-Soft
并[email protected]
按照此主题
请注意,Jenkins 帮助中有以下内容Group search base
:
Jenkins 在 LDAP 上进行的搜索之一是查找用户的组列表。
此字段确定要运行的查询,以识别包含组的组织单位。查询几乎总是“ou=groups”,因此请先尝试该查询,尽管此字段可以留空以从根 DN 进行搜索。
如果登录尝试导致“超出管理限制”或类似错误,请尝试使此设置尽可能具体地针对您的 LDAP 结构,以减少查询范围。如果错误仍然存在,您可能需要编辑
WEB-INF/security/LDAPBindSecurityRealm.groovy
jenkins.war 中包含的文件。将行更改为:groupSearchFilter = "(| (member={0}) (uniqueMember={0}) (memberUid={1}))";
仅查询 LDAP 中用于组成员身份的字段,例如:groupSearchFilter = "(member={0})";
然后重新启动 Jenkins 并重试登录。
我已尝试此文件中的两个值,但均不起作用。
答案1
今天 Jenkins 2 遇到了同样的问题。LDAP 配置已正常工作,我可以以 AD 用户身份登录,我可以将 AD 用户添加到矩阵,但是当我将组添加到矩阵时,它会显示该组“未找到用户/组”。
最后修复了它 https://wiki.jenkins-ci.org/display/JENKINS/LDAP+Plugin#LDAPPlugin-Groupsearchbase
解决方法是添加(& (cn={0}) (objectclass=group) )
组搜索过滤器。
默认情况下,Jenkins 使用
(& (cn={0}) (| (objectclass=groupOfNames) (objectclass=groupOfUniqueNames) (objectclass=posixGroup)))
我们的AD组只有
objectClass: top
objectClass: group
答案2
今天早上我才发现,Jenkins 在 AD 组名方面区分大小写。
只是添加这个答案以防有人沮丧地抓狂。
这完全不明显,因为 AD 组名通常在任何地方都不区分大小写。
答案3
尝试制作你的群组搜索基数完全限定,即“ou=KSGroups,dc=mydomain,dc=com”。此外,组名几乎肯定不会以“@mydomain.com”结尾(除非您故意这样命名)。
我建议使用 openldap 工具中的“ldapsearch”或类似的 Windows 命令行工具来尝试群组搜索过滤器直到找到一个可以给出您想要的结果的方法,然后将其导入到 .groovy 文件中。