典型的 LDAP 配置
这个页面包含了不同配置情况下的 ldap-config.properties
文件的样本。
基本 LDAP 登录
以下给出了最小可工作配置的示例。 我们建议使用 TLS/SSL 加密的 LDAPS,这是一个更安全的选项。
Windows Active Directory
java.naming.provider.url=ldaps://dc.example.com:636/DC=example,DC=com
java.naming.security.principal=<username>
java.naming.security.credentials=<password>
teamcity.users.login.filter=(sAMAccountName=$capturedLogin$)
teamcity.users.username=sAMAccountName
请注意, sAMAccountName
的长度限制为 20 个符号。 您可能想要使用另一个包含完整用户名的属性。
Unix
java.naming.provider.url=ldaps://dc.example.com:636/DC=example,DC=com
java.naming.security.principal=<username>
java.naming.security.credentials=<password>
teamcity.users.login.filter=(uid=$capturedLogin$)
teamcity.users.username=uid
在这种情况下,TeamCity 不会存储用户密码。 每次用户登录时,都会通过直接登录到 LDAP 进行身份验证,登录表单中输入的凭据。
指定备份 LDAP 服务器
您可以按如下方式在 java.naming.provider.url
属性中指定备份 LDAP 服务器:
# The second URL is used when the first server is down.
java.naming.provider.url=ldaps://example.com:636/DC=example,DC=com ldaps://failover.example.com:636/DC=example,DC=com
仅限特定LDAP组中的用户进行基本LDAP登录
只允许特定用户组的用户登录。 用户只需要输入用户名,无需域部分,即可登录。 此示例适用于 Windows Active Directory:
java.naming.provider.url=ldaps://example.com:636/DC=example,DC=com
java.naming.security.principal=<username>
java.naming.security.credentials=<password>
# filtering only users with specified name and belonging to LDAP group "Group1" with DN "CN=Group1,CN=Users,DC=example,DC=com"
teamcity.users.login.filter=(&(sAMAccountName=$capturedLogin$)(memberOf=CN=Group1,CN=Users,DC=example,DC=com))
#teamcity.users.username=sAMAccountName
# Allow only username part without domain (optional)
teamcity.auth.loginFilter=[^/\\\\@]+
# No synchronization, just login.
teamcity.options.users.synchronize=false
teamcity.options.groups.synchronize=false
带有用户详情同步的 Active Directory
用户可以使用域名部分进行登录 TeamCity,无需提供域名,这里有一个账号 "teamcity",密码是 "secret",能够读取所有 Active Directory 条目。 TeamCity 用户显示名称和电子邮件是从 Active Directory 中同步的。
java.naming.provider.url=ldaps://example.com:636/DC=example,DC=com
java.naming.security.principal=CN=teamcity,CN=Users,DC=example,DC=com
java.naming.security.credentials=secret
teamcity.users.login.filter=(sAMAccountName=$capturedLogin$)
teamcity.users.username=sAMAccountName
# User synchronization: on, synchronize display name and email.
teamcity.options.users.synchronize=true
teamcity.users.filter=(objectClass=user)
teamcity.users.property.displayName=displayName
teamcity.users.property.email=mail
带有用户详细信息同步和用户创建的 Active Directory
用户可以使用域名部分进行登录 TeamCity,无需提供域名,这里有一个账号 "teamcity",密码是 "secret",能够读取所有 Active Directory 条目。 TeamCity 用户显示名称和电子邮件是从 Active Directory 中同步的。 在 TeamCity 数据库中不存在的用户将被创建。 在 Active Directory 中不存在的用户将被从 TeamCity 用户数据库中删除。
java.naming.provider.url=ldaps://example.com:636/DC=example,DC=com
java.naming.security.principal=CN=teamcity,CN=Users,DC=example,DC=com
java.naming.security.credentials=secret
teamcity.users.login.filter=(sAMAccountName=$capturedLogin$)
teamcity.users.username=sAMAccountName
# User synchronization: on, synchronize display name and email.
teamcity.options.users.synchronize=true
teamcity.users.filter=(objectClass=user)
teamcity.users.property.displayName=displayName
teamcity.users.property.email=mail
# Automatic user creation and deletion during user synchronization
teamcity.options.createUsers=true
teamcity.options.deleteUsers=true
带有群组同步的 Active Directory
应该有一个包含一个或多个组映射定义的 ldap-mapping.xml
文件。
ldap-config.properties
文件:
java.naming.provider.url=ldaps://example.com:636/DC=example,DC=com
java.naming.security.principal=CN=teamcity,CN=Users,DC=example,DC=com
java.naming.security.credentials=secret
teamcity.users.login.filter=(sAMAccountName=$capturedLogin$)
teamcity.users.username=sAMAccountName
# User synchronization is on, synchronize display name and email.
teamcity.options.users.synchronize=true
teamcity.users.filter=(objectClass=user)
teamcity.users.property.displayName=displayName
teamcity.users.property.email=mail
# Automatic user creation and deletion during users synchronization
teamcity.options.createUsers=true
teamcity.options.deleteUsers=true
# Groups synchronization is on
teamcity.options.groups.synchronize=true
# The group search LDAP filter used to retrieve groups to synchronize.
# The result includes all the groups configured in the ldap-mapping.xml file.
teamcity.groups.filter=(objectClass=group)
# The LDAP attribute of a group storing its members.
teamcity.groups.property.member=member
限制要同步的组的数量
teamcity.users.filter
属性有助于限制在用户同步过程中处理的用户帐户数量。
建议在活动目录中创建 "TeamCity Users" 群组,并将所有需要的群组包含在此群组中,例如,您可能有以下活动目录结构:
然后更新 teamcity.users.filter
属性。 例如,
teamcity.users.filter=(&(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=TeamCity Users,OU=Accounts,DC=domain,DC=com))
在这种情况下,只有当它们是相应 Active Directory 组的成员时,TeamCity 才会创建帐户。 支持嵌套群组。
或者,您可以列出几个组:
teamcity.users.filter=(&(objectClass=user)(|(memberOf=CN=GroupOne,OU=myou,DC=company,DC=tld)(memberOf=CN=GroupTwo,OU=myou,DC=company,DC=tld)))
为了限制可以登录 TeamCity 的用户,您还需要更改 teamcity.users.login.filter
属性:
teamcity.users.login.filter=(&(sAMAccountName=$capturedLogin$)(memberOf:1.2.840.113556.1.4.1941:=CN=TeamCity Users,OU=Accounts,DC=domain,DC=com))
有关过滤器语法的更多详细信息,请参考 Microsoft 文档。 有关 AD 属性的更多详细信息,请参阅 Microsoft documentation。
最后修改日期: 16日 7月 2024年