TeamCity On-Premises 2024.03 Help

典型的 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" 群组,并将所有需要的群组包含在此群组中,例如,您可能有以下活动目录结构:

  • A 组的成员包括 User 1 、 User 2

  • B组成员包括 User 3 、 User 4

  • TeamCity Users" 组,其成员为 Group A 、 Group B

然后更新 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年