将 AD FS 2.0 联合服务器迁移到 Windows Server 2012 R2 上的 AD FS

若要将属于单一节点 AD FS 场、WIF 场或 SQL Server 场的 AD FS 联合服务器迁移到 Windows Server 2012 R2,必须执行以下任务:

  1. 导出并备份 AD FS 配置数据

  2. 创建 Windows Server 2012 R2 联合服务器场

  3. 将原始配置数据导入 Windows Server 2012 R2 AD FS 场

导出并备份 AD FS 配置数据

若要导出 AD FS 配置设置,请执行以下过程:

导出服务设置

  1. 确保你有权访问 .pfx 文件中的以下证书及其私钥:

    • 要迁移的联合服务器场使用的 SSL 证书

    • 要迁移的联合服务器场使用的服务通信证书(如果该证书不同于 SSL 证书)

    • 要迁移的联合服务器场使用的所有第三方令牌签名或令牌加密/解密证书

若要查找 SSL 证书,请打开 Internet 信息服务 (IIS) 管理控制台,在左窗格中选择“默认网站”、在“操作”窗格中单击“绑定...”、查找并选择 http 绑定、单击“编辑”,然后单击“查看”

必须将联合身份验证服务使用的 SSL 证书及其私钥导出到 .pfx 文件。 有关详细信息,请参阅 导出服务器身份验证证书的私钥部分

注意

如果计划在 Windows Server 2012 R2 中运行 AD FS 时部署设备注册服务,则必须获取新的 SSL 证书。有关详细信息,请参阅为 AD FS 注册 SSL 证书使用设备注册服务配置联合服务器

若要查看使用的令牌签名、令牌解密和服务通信证书,请运行以下 Windows PowerShell 命令,以便在文件中创建使用的所有证书的列表:

Get-ADFSCertificate | Out-File “.\certificates.txt”
  1. 将 AD FS 联合身份验证服务属性(例如联合身份验证服务名称、联合身份验证服务显示名称和联合服务器标识符)导出到文件中。

若要导出联合身份验证服务属性,请打开 Windows PowerShell 并运行以下命令:

Get-ADFSProperties | Out-File “.\properties.txt”`.

输出文件将包含以下重要配置值:

Get-ADFSProperties 报告的联合身份验证服务属性名称 AD FS 管理控制台中的联合身份验证服务属性名称
HostName 联合身份验证服务名称
标识符 联合身份验证服务标识符
DisplayName 联合身份验证服务显示名称
  1. 备份应用程序配置文件。 除了其他设置以外,此文件还包含策略数据库连接字符串。

若要备份应用程序配置文件,必须手动将 %programfiles%\Active Directory Federation Services 2.0\Microsoft.IdentityServer.Servicehost.exe.config 文件复制到备份服务器上的安全位置。

注意

记下此文件中紧接在“policystore connectionstring=”后面的数据库连接字符串。 如果该连接字符串指定了 SQL Server 数据库,则在联合服务器上还原原始 AD FS 配置时需要使用该值。

以下是 WID 连接字符串的示例:“Data Source=\\.\pipe\mssql$microsoft##ssee\sql\query;Initial Catalog=AdfsConfiguration;Integrated Security=True"。 以下是 SQL Server 连接字符串的示例:"Data Source=databasehostname;Integrated Security=True"

  1. 记录 AD FS 联合身份验证服务帐户的标识以及此帐户的密码。

若要查找标识值,请在“服务”控制台中查看“AD FS 2.0 Windows 服务”的“登录为”列并手动记录此值。

注意

对于独立的联合身份验证服务,将使用内置的 NETWORK SERVICE 帐户。 在此情况下,你不需要使用密码。

  1. 将已启用的 AD FS 终结点列表导出到文件中。

为此,请打开 Windows PowerShell 并运行以下命令:

Get-ADFSEndpoint | Out-File “.\endpoints.txt”`.
  1. 将所有自定义声明说明导出到文件中。

为此,请打开 Windows PowerShell 并运行以下命令:

Get-ADFSClaimDescription | Out-File “.\claimtypes.txt”`.
  1. 如果你在 web.config 中配置了 useRelayStateForIdpInitiatedSignOn 等自定义设置,请确保备份 web.config 文件以供参考。 在 IIS 中,你可以复制映射到虚拟路径“/adfs/ls”的目录中的文件。 默认情况下,它位于 %systemdrive%\inetpub\adfs\ls 目录中。

导出声明提供程序信任和信赖方信任

  1. 若要导出 AD FS 声明提供程序信任和信赖方信任,你必须以管理员身份(但不能以域管理员身份)登录联合服务器,并运行 Windows Server 2012 R2 安装 CD 的 media/server_support/adfs 文件夹中的以下 Windows PowerShell 脚本:export-federationconfiguration.ps1

重要

导出脚本使用以下参数:

  • Export-FederationConfiguration.ps1 -Path <string> [-ComputerName <string>] [-Credential <pscredential>] [-Force] [-CertificatePassword <securestring>]

    • Export-FederationConfiguration.ps1 -Path <string> [-ComputerName <string>] [-Credential <pscredential>] [-Force] [-CertificatePassword <securestring>] [-RelyingPartyTrustIdentifier <string[]>] [-ClaimsProviderTrustIdentifier <string[]>]
    • Export-FederationConfiguration.ps1 -Path <string> [-ComputerName <string>] [-Credential <pscredential>] [-Force] [-CertificatePassword <securestring>] [-RelyingPartyTrustName <string[]>] [-ClaimsProviderTrustName <string[]>]

    -RelyingPartyTrustIdentifier <string[]> - 该 cmdlet 只会导出字符串数组中已指定了标识符的信赖方信任。 默认设置为不导出任何信赖方信任。 如果 RelyingPartyTrustIdentifier、ClaimsProviderTrustIdentifier、RelyingPartyTrustName 和 ClaimsProviderTrustName 都未指定,则脚本将导出所有信赖方信任和声明提供程序信任。

    -ClaimsProviderTrustIdentifier <string[]> - 该 cmdlet 只会导出字符串数组中已指定了标识符的声明提供程序信任。 默认设置为不导出任何声明提供程序信任。

    -RelyingPartyTrustName <string[]> - 该 cmdlet 只会导出字符串数组中已指定了名称的信赖方信任。 默认设置为不导出任何信赖方信任。

    -ClaimsProviderTrustName <string[]> - 该 cmdlet 只会导出字符串数组中已指定了名称的声明提供程序信任。 默认设置为不导出任何声明提供程序信任。

    -Path <string> - 将包含所导出文件的文件夹的路径。

    -ComputerName <string> - 指定 STS 服务器主机名。 默认为本地计算机。 如果要将 Windows Server 2012 中的 AD FS 2.0 或 AD FS 迁移到 Windows Server 2012 R2 中的 AD FS,则为原有 AD FS 服务器的主机名。

    -Credential <PSCredential> - 指定有权执行此操作的用户帐户。 默认为当前用户。

    -Force – 指定不提示用户进行确认。

    -CertificatePassword <SecureString> - 指定用于导出 AD FS 证书私钥的密码。 如果不指定此项,则需要导出带有私钥的 AD FS 证书时,脚本将提示用户提供密码。

    Inputs:无

    Outputs:字符串 - 此 cmdlet 将返回导出文件夹路径。 可以通过管道将返回的对象传递给 Import-FederationConfiguration。

备份自定义特性存储

  1. 必须在 Windows Server 2012 R2 中手动导出需要保留在新 AD FS 场内的所有自定义属性存储。

注意

在 Windows Server 2012 R2 中,AD FS 需要基于 .NET Framework 4.0 或更高版本的自定义属性存储。 按照 Microsoft .NET Framework 4.5 中的说明安装和设置 .Net Framework 4.5。

可以通过运行以下 Windows PowerShell 命令来查找 AD FS 所用的自定义特性存储的相关信息:

Get-ADFSAttributeStore

升级或迁移自定义特性存储的步骤将有所不同。

  1. 还必须在 Windows Server 2012 R2 中手动导出需要保留在新 AD FS 场内的自定义属性存储的所有 .dll 文件。 升级或迁移自定义特性存储的 .dll 文件的步骤将有所不同。

创建 Windows Server 2012 R2 联合服务器场

  1. 在需要用作联合服务器的计算机上安装 Windows Server 2012 R2 操作系统,然后添加 AD FS 服务器角色。 有关详细信息,请参阅安装 AD FS 角色服务。 然后,通过 Active Directory 联合身份验证服务配置向导或 Windows PowerShell 配置新的联合身份验证服务。 有关详细信息,请参阅配置联合服务器中的“配置新的联合服务器场中的第一个联合服务器”。

在完成此步骤时,必须遵照以下说明:

  • 只有具有域管理员权限才能配置联合身份验证服务。

  • 使用的联合身份验证服务名称(场名称)必须与 Windows Server 2012 中的 AD FS 2.0 或 AD FS 内使用的名称相同。 如果不使用相同的联合身份验证服务名称,则备份的证书将无法在你要尝试配置的 Windows Server 2012 R2 联合身份验证服务中正常运行。

  • 请指定这是 WID 还是 SQL Server 联合服务器场。 如果是 SQL 场,请指定 SQL Server 数据库位置和实例名称。

  • 必须提供一个 pfx 文件,其中包含你在准备 AD FS 迁移的过程中备份的 SSL 服务器身份验证证书。

  • 指定的服务帐户标识必须与 Windows Server 2012 场中的 AD FS 2.0 或 AD FS 内使用的标识相同。

  1. 配置初始节点后,可以将更多节点添加到新场中。 有关详细信息,请参阅配置联合服务器中的“向现有的联合服务器场中添加联合服务器”。

将原始配置数据导入 Windows Server 2012 R2 AD FS 场

在 Windows Server 2012 R2 中运行 AD FS 联合服务器场后,可以将原始 AD FS 配置数据导入到该场中。

  1. 导入并配置其他自定义 AD FS 证书,包括外部注册的令牌签名和令牌解密/加密证书,以及服务通信证书(如果不同于 SSL 证书)。

在 AD FS 管理控制台中,选择“证书”。 验证服务通信、令牌加密/解密和令牌签名证书,方法是根据你在准备迁移时导出到 certificates.txt 文件中的值检查每个证书。

若要将令牌解密或令牌签名证书从默认的自签名证书更改为外部证书,必须先禁用按默认启用的自动证书滚动功能。 为此,可以使用以下 Windows PowerShell 命令:

Set-ADFSProperties –AutoCertificateRollover $false
  1. 使用 Set-AdfsProperties cmdlet 来配置任何自定义 AD FS 服务设置,例如 AutoCertificateRollover 或 SSO 生存期。

  2. 若要导入 AD FS 信赖方信任和声明提供程序信任,则你必须以管理员身份(但不能以域管理员身份)登录联合服务器,并运行位于 Windows Server 2012 R2 安装 CD 的 \support\adfs 文件夹中的以下 Windows PowerShell 脚本:

    import-federationconfiguration.ps1
    

重要

导入脚本使用以下参数:

  • Import-FederationConfiguration.ps1 -Path <string> [-ComputerName <string>] [-Credential <pscredential>] [-Force] [-LogPath <string>] [-CertificatePassword <securestring>]
  • Import-FederationConfiguration.ps1 -Path <string> [-ComputerName <string>] [-Credential <pscredential>] [-Force] [-LogPath <string>] [-CertificatePassword <securestring>] [-RelyingPartyTrustIdentifier <string[]>] [-ClaimsProviderTrustIdentifier <string[]>
  • Import-FederationConfiguration.ps1 -Path <string> [-ComputerName <string>] [-Credential <pscredential>] [-Force] [-LogPath <string>] [-CertificatePassword <securestring>] [-RelyingPartyTrustName <string[]>] [-ClaimsProviderTrustName <string[]>]

-RelyingPartyTrustIdentifier <string[]> - 该 cmdlet 只会导入字符串数组中已指定了标识符的信赖方信任。 默认设置为不导入任何信赖方信任。 如果 RelyingPartyTrustIdentifier、ClaimsProviderTrustIdentifier、RelyingPartyTrustName 和 ClaimsProviderTrustName 都未指定,则脚本将导入所有信赖方信任和声明提供程序信任。

-ClaimsProviderTrustIdentifier <string[]> - 该 cmdlet 只会导入字符串数组中已指定了标识符的声明提供程序信任。 默认设置为不导入任何声明提供程序信任。

-RelyingPartyTrustName <string[]> - 该 cmdlet 只会导入字符串数组中已指定了名称的信赖方信任。 默认设置为不导入任何信赖方信任。

-ClaimsProviderTrustName <string[]> - 该 cmdlet 只会导入字符串数组中已指定了名称的声明提供程序信任。 默认设置为不导入任何声明提供程序信任。

-Path <string> - 包含要导入的配置文件的文件夹的路径。

-LogPath <string> - 将包含导入日志文件的文件夹的路径。 将在此文件夹中创建名为“import.log”的日志文件。

-ComputerName <string> - 指定 STS 服务器的主机名。 默认为本地计算机。 如果要将 Windows Server 2012 中的 AD FS 2.0 或 AD FS 迁移到 Windows Server 2012 R2 中的 AD FS,应将此参数设置为原有 AD FS 服务器的主机名。

-Credential <PSCredential>- 指定有权执行此操作的用户帐户。 默认为当前用户。

-Force – 指定不提示用户进行确认。

-CertificatePassword <SecureString> - 指定用于导入 AD FS 证书私钥的密码。 如果不指定此项,则需要导入带有私钥的 AD FS 证书时,脚本将提示用户提供密码。

Inputs:字符串 - 此命令使用导入文件夹路径作为输入。 可以通过管道将 Export-FederationConfiguration 传递到此命令。

Outputs:无。

在信赖方信任的 WSFedEndpoint 属性中使用任何尾随空格都可能会导致导入脚本出错。 对于这种情况,请在导入之前从文件中手动删除这些空格。 例如,下列条目会导致错误:

<URI N="WSFedEndpoint">https://127.0.0.1:444 /</URI>
<URI N="WSFedEndpoint">https://myapp.cloudapp.net:83 /</URI>

必须将其编辑为:

<URI N="WSFedEndpoint">https://127.0.0.1:444/</URI>
<URI N="WSFedEndpoint">https://myapp.cloudapp.net:83/</URI>

重要

如果针对源系统中的 Active Directory 声明提供程序信任使用了任何自定义声明规则(除 AD FS 默认规则以外的规则),脚本将不会迁移这些规则。 这是因为 Windows Server 2012 R2 具有新的默认规则。 必须合并所有自定义规则,方法是手动将它们添加到新 Windows Server 2012 R2 场内的 Active Directory 声明提供程序信任中。

  1. 配置所有自定义 AD FS 终结点设置。 在 AD FS 管理控制台中选择“终结点”。 根据你在准备 AD FS 迁移时导出到文件中的已启用 AD FS 终结点列表检查已启用的 AD FS 终结点。

    - 和 -

    配置所有自定义声明说明。 在 AD FS 管理控制台中选择“声明说明”。 针对你在准备 AD FS 迁移时导出到文件中的声明说明列表,检查 AD FS 声明说明的列表。 在 AD FS 中添加包含在文件中,但未包含在默认列表中的所有自定义声明说明。 请注意,管理控制台中的 Claim 标识符将映射到文件中的 ClaimType。

  2. 安装并配置所有已备份的自定义特性存储。 在更新 AD FS 配置之前,管理员应确保将所有自定义特性存储二进制文件升级到 .NET Framework 4.0 或更高版本,这样才能指向这些二进制文件。

  3. 配置要映射到原有 web.config 文件参数的服务属性。

    • 如果已将 useRelayStateForIdpInitiatedSignOn 添加到 Windows Sever 2012 场中的 AD FS 2.0 或 AD FS 内的 web.config 文件,则必须在 Windows Server 2012 R2 场中的 AD FS 内配置以下服务属性:

      • Windows Server 2012 R2 中的 AD FS 包含一个 %systemroot%\ADFS\Microsoft.IdentityServer.Servicehost.exe.config 文件。 使用与 web.config 文件元素相同的语法创建一个元素:<useRelayStateForIdpInitiatedSignOn enabled="true" />。 包含此元素作为 Microsoft.IdentityServer.Servicehost.exe.config 文件的 <microsoft.identityserver.web> 节的一部分。
    • 如果已将 <persistIdentityProviderInformation enabled="true|false" lifetimeInDays="90" enablewhrPersistence=”true|false” /> 添加到 Windows Sever 2012 场中的 AD FS 2.0 或 AD FS 内的 web.config 文件,则必须在 Windows Server 2012 R2 场中的 AD FS 内配置以下服务属性:

      1. 在 Windows Server 2012 R2 中的 AD FS 内,运行以下 Windows PowerShell 命令:Set-AdfsWebConfig –HRDCookieEnabled –HRDCookieLifetime
    • 如果已将 <singleSignOn enabled="true|false" /> 添加到 Windows Sever 2012 场中的 AD FS 2.0 或 AD FS 内的 web.config 文件,则不需要在 Windows Server 2012 R2 场中的 AD FS 内设置任何其他服务属性。 默认情况下,Windows Server 2012 R2 场中的 AD FS 内会启用单一登录。

    • 如果已将 localAuthenticationTypes 设置添加到 Windows Sever 2012 场中的 AD FS 2.0 或 AD FS 内的 web.config 文件,则必须在 Windows Server 2012 R2 场中的 AD FS 内配置以下服务属性:

      • “集成”、“表单”、“TlsClient”和“基本”。Windows Server 2012 R2 中的等效 AD FS 的转换列表包含全局身份验证策略设置,用于支持联合身份验证服务和代理身份验证类型。 可以在“身份验证策略”下的“管理”管理单元中的 AD FS 内配置这些设置。

    导入原始配置数据后,可以根据需要自定义 AD FS 登录页。 有关详细信息,请参阅自定义 AD FS 登录页

后续步骤

将 Active Directory 联合身份验证服务角色服务迁移到 Windows Server 2012 R2准备迁移 AD FS 联合服务器迁移 AD FS 联合服务器代理验证到 Windows Server 2012 R2 的 AD FS 迁移