配置 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 和非 AD 目录中的用户进行身份验证和授权访问。

仅支持基于表单的身份验证,以便从 LDAP 目录对用户进行身份验证。 LDAP 目录中的用户身份验证不支持基于证书和集成的 Windows 身份验证。

AD FS 支持的所有被动授权协议(包括 SAML、WS 联合身份验证和 OAuth)也支持存储在 LDAP 目录中的标识。

对于存储在 LDAP 目录中的标识,也支持 WS-Trust 活动授权协议。

配置 AD FS 以对存储在 LDAP 目录中的用户进行身份验证

若要将 AD FS 场配置为对 LDAP 目录中的用户进行身份验证,可以完成以下步骤:

  1. 首先,使用 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 参数添加连接对象的数组。

    注意: 您可能试图使用 Get-Credential 并输入要用于绑定到 LDAP 实例的 DN 和密码,可能会由于用户界面对特定输入格式的要求而导致失败,例如域\用户名或 user@___domain.tld。 可改为使用 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 的密码,并完成其余步骤。

  2. 接下来,可以使用 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"
    

    为了在 AD FS 中创建条件访问控制规则,需要将 LDAP 存储中的属性映射为 AD FS 中的声明。 它还允许 AD FS 通过提供将 LDAP 属性映射到声明的简单方法来处理 LDAP 存储中的自定义架构。

  3. 最后,必须使用 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 就可以在为活动授权请求提供服务时消除本地声明提供程序信任之间的歧义。

另请参阅

AD FS 操作