配置 AD FS 以对存储在 Windows Server 2016 或更高版本的 LDAP 目录中的用户进行身份验证
以下主题介绍使 AD FS 基础结构能够对其标识存储在轻型目录访问协议 (LDAP) v3 兼容目录中的用户进行身份验证所需的配置。
在许多组织中,身份管理解决方案由 Active Directory、AD LDS 或第三方 LDAP 目录的组合组成。 通过添加对存储在 LDAP v3 兼容目录中的用户进行身份验证的 AD FS 支持,无论用户标识存储在何处,都可以受益于整个企业级 AD FS 功能集。 AD FS 支持任何 LDAP v3 兼容目录。
注意
一些 AD FS 功能包括单一登录 (SSO)、设备身份验证、灵活的条件访问策略、通过与 Web 应用程序代理集成支持随时随地工作,以及与 Microsoft Entra 的无缝联合,从而使你和你的用户能够利用云(包括 Office 365 和其他 SaaS 应用程序)。 有关详细信息,请参阅 Active Directory 联合身份验证服务概述。
若要让 AD FS 验证来自 LDAP 目录的用户,必须通过创建本地声明提供程序信任将此 LDAP 目录连接到 AD FS 场。 本地声明提供程序信任是表示 AD FS 场中的 LDAP 目录的信任对象。 本地声明提供程序信任对象包含各种标识符、名称和用于在本地联合身份验证服务中标识此 LDAP 目录的规则。
通过添加多个本地声明提供程序信任,可以在同一个 AD FS 场中支持多个 LDAP 目录,其中每个目录都有自己的配置。 此外,不受 AD FS 所在的林信任的 AD DS 林也可以建模为本地声明提供程序信任。 可以使用 Windows PowerShell 创建本地声明提供程序信任。
LDAP 目录(本地声明提供程序信任)可以与同一 AD FS 服务器上的 AD 目录(声明提供程序信任)在同一个 AD FS 场内共存,因此,单个 AD FS 实例能够对存储在 AD 和非 AD 目录中的用户进行身份验证和授权访问。
仅支持基于表单的身份验证对 LDAP 目录中的用户进行身份验证。 不支持基于证书和集成 Windows 身份验证对 LDAP 目录中的用户进行身份验证。
存储在 LDAP 目录中的标识也支持由 AD FS 支持的所有被动授权协议,包括 SAML、WS 联合身份验证和 OAuth。
存储在 LDAP 目录中的标识也支持 WS-Trust 主动授权协议。
配置 AD FS 以对存储在 LDAP 目录中的用户进行身份验证
要将 AD FS 场配置为对 LDAP 目录中的用户进行身份验证,可以完成以下步骤:
首先,使用 New-AdfsLdapServerConnection cmdlet 配置与 LDAP 目录的连接:
$DirectoryCred = Get-Credential $vendorDirectory = New-AdfsLdapServerConnection -HostName dirserver -Port 50000 -SslMode None -AuthenticationMethod Basic -Credential $DirectoryCred
注意
建议为每个要连接的 LDAP 服务器创建一个新的连接对象。 AD FS 可以连接到多个副本 LDAP 服务器,并在特定 LDAP 服务器关闭时自动进行故障转移。 对于这种情况,可以为其中每个副本 LDAP 服务器创建一个 AdfsLdapServerConnection,然后使用 Add-AdfsLocalClaimsProviderTrust cmdlet 的 -LdapServerConnection 参数添加连接对象的数组。
注意:由于特定输入格式的用户界面要求(例如 domain\username 或 user@domain.tld),因此尝试使用 Get-Credential 并键入用于绑定到 LDAP 实例的 DN 和密码可能会失败。 可改为使用 ConvertTo-SecureString cmdlet,如下所示(以下示例假定 uid=admin,ou=system 作为用于绑定到 LDAP 实例的凭据的 DN):
$ldapuser = ConvertTo-SecureString -string "uid=admin,ou=system" -asplaintext -force $DirectoryCred = Get-Credential -username $ldapuser -Message "Enter the credentials to bind to the LDAP instance:"
然后输入 uid=admin 的密码,并完成其余步骤。
接下来,可以使用 New-AdfsLdapAttributeToClaimMapping cmdlet 执行将 LDAP 属性映射到现有 AD FS 声明的可选步骤。 在下面的示例中,将 givenName、Surname 和 CommonName LDAP 属性映射到 AD FS 声明:
#Map given name claim $GivenName = New-AdfsLdapAttributeToClaimMapping -LdapAttribute givenName -ClaimType "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname" # Map surname claim $Surname = New-AdfsLdapAttributeToClaimMapping -LdapAttribute sn -ClaimType "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname" # Map common name claim $CommonName = New-AdfsLdapAttributeToClaimMapping -LdapAttribute cn -ClaimType "http://schemas.xmlsoap.org/claims/CommonName"
完成此映射是为了使 LDAP 存储中的属性可用作 AD FS 中的声明,以便在 AD FS 中创建条件访问控制规则。 它还通过提供一种将 LDAP 属性映射到声明的简单方法,使 AD FS 能够使用 LDAP 存储中的自定义架构。
最后,必须使用 Add-AdfsLocalClaimsProviderTrust cmdlet 将 LDAP 存储注册到 AD FS 作为本地声明提供程序信任:
Add-AdfsLocalClaimsProviderTrust -Name "Vendors" -Identifier "urn:vendors" -Type Ldap # Connection info -LdapServerConnection $vendorDirectory # How to locate user objects in directory -UserObjectClass inetOrgPerson -UserContainer "CN=VendorsContainer,CN=VendorsPartition" -LdapAuthenticationMethod Basic # Claims for authenticated users -AnchorClaimLdapAttribute mail -AnchorClaimType "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" -LdapAttributeToClaimMapping @($GivenName, $Surname, $CommonName) # General claims provider properties -AcceptanceTransformRules "c:[Type != ''] => issue(claim=c);" -Enabled $true # Optional - supply user name suffix if you want to use Ws-Trust -OrganizationalAccountSuffix "vendors.contoso.com"
在上面的示例中,你将创建一个名为“Vendors”的本地声明提供程序信任。 通过将
$vendorDirectory
分配给-LdapServerConnection
参数,可为 AD FS 指定连接信息,以连接到此本地声明提供程序信任的 LDAP 目录。 请注意,在步骤 1 中,你已经为$vendorDirectory
分配了在连接到特定 LDAP 目录时要使用的连接字符串。 最后,你将指定$GivenName
、$Surname
和$CommonName
LDAP 属性(已映射到 AD FS 声明)用于条件访问控制,包括多重身份验证策略和颁发授权规则,以及通过 AD FS 颁发的安全令牌中的声明进行颁发。 若要将 Ws-Trust 等可用协议与 AD FS 一起使用,必须指定 OrganizationalAccountSuffix 参数,该参数使 AD FS 能够在为活动授权请求提供服务时消除本地声明提供程序信任之间的歧义。