配置从 SharePoint Server 到 SharePoint in Microsoft 365 的服务器间身份验证

适用于:yes-img-132013 yes-img-162016 yes-img-192019 yes-img-seSubscription Edition yes-img-sopSharePoint in Microsoft 365

本文是配置 SharePoint 混合解决方案的过程路线图的一部分。 执行本文中的过程时,请确保遵循路线图

注意

建议使用 SharePoint 混合配置向导在 SharePoint Server 和 Microsoft 365 中的 SharePoint 之间建立服务器到服务器身份验证。 如果出于任何原因无法使用混合配置向导,请按照本文中的步骤启用服务器到服务器身份验证。

配置服务器间身份验证

本文提供了 SharePoint 混合环境部署过程的指南,此过程将集成 SharePoint Server 和 SharePoint in Microsoft 365。

提示

为了实现最可靠的结果,请按本文中所示顺序完成以下过程。

验证 Web 应用程序设置

在 SharePoint 混合环境,联合用户可以从配置为使用采用了 NTLM 的集成 Windows 身份验证的任何 SharePoint Server Web 应用程序向 SharePoint in Microsoft 365 发送请求。

例如,您必须确保将要在解决方案中使用的本地搜索中心网站配置为使用采用了 NTLM 的集成 Windows 身份验证。 如果没有这样配置,您要么将 Web 应用程序重新配置为使用采用了 NTLM 的集成 Windows 身份验证,要么使用满足此要求的 Web 应用程序上的搜索中心网站。 您还必须确保希望从 Microsoft 365 中的 SharePoint 返回搜索结果的用户是联合用户。

确认 Web 应用程序满足要求

  1. 确认要执行此过程的用户帐户是服务器场管理员 SharePoint 组的成员。

  2. 在管理中心,选择“应用程序管理”,然后选择“管理 Web 应用程序”。

  3. 在“名称”列中,选择要验证的 Web 应用程序,然后在功能区中选择“验证提供程序”。

  4. 在“验证提供程序”对话框的“区域”栏中,选择与搜索中心网站关联的区域。

  5. 在“编辑验证”对话框中,确认已选择集成 Windows 身份验证和 NTLM,如下图中所示。

    Web 应用程序的身份验证类型设置。

配置 OAuth over HTTP(如果需要)

默认情况下,SharePoint Server 中的 OAuth 需要 HTTPS 。 如果您将主 Web 应用程序配置为使用 HTTP 而非 SSL,您必须在 SharePoint Server 场中的每台 Web 服务器上启用 OAuth over HTTP

注意

如果你已将自己的主 Web 应用程序配置为使用 SSL,则不需要执行此步骤。

若要启用 OAuth over HTTP,请在 SharePoint Server 服务器场的每台 Web 服务器上通过场管理员帐户从 SharePoint 2016 命令行管理程序命令提示符处运行以下命令。

$serviceConfig = Get-SPSecurityTokenServiceConfig
$serviceConfig.AllowOAuthOverHttp = $true
$serviceConfig.Update()

如果您已启用 OAuth over HTTP 进行测试,但希望将环境重新配置为使用 SSL,您可以在 SharePoint Server 服务器场的每台 Web 服务器上通过场管理员帐户从 SharePoint 2016 命令行管理程序命令提示符处运行以下命令,以禁用 OAuth over HTTP。

$serviceConfig = Get-SPSecurityTokenServiceConfig
$serviceConfig.AllowOAuthOverHttp = $false
$serviceConfig.Update()

在本地 SharePoint Server 和 SharePoint in Microsoft 365 之间配置服务器到服务器身份验证

本节将帮助您在以下产品之间设置服务器到服务器身份验证:

  • SharePoint Server

  • SharePoint in Microsoft 365

  • Microsoft Entra ID

为混合环境设置服务器到服务器身份验证时,可以在本地 SharePoint 场Microsoft 365 租户中的 SharePoint 之间创建信任关系,后者使用 Microsoft Entra ID 作为受信任的令牌签名服务。 通过添加所需的 PowerShell 模块和管理单元,可在本地 SharePoint Web 服务器上的单个 PowerShell 窗口中执行此过程。

提示

[!提示] 您将需要记录您执行的步骤、您运行的 PowerShell cmdlet 以及您可能遇到的任何错误。 您应在完成后、关闭窗口之前捕获 PowerShell 缓冲的全部内容。 这样即可维护关于所执行步骤的历史记录,当您需要进行故障排除或向其他人解释整个过程时,这将非常有用。 如果设置分阶段进行,这对于刷新内存也很有用。

下面概括介绍了本节中需完成的过程:

  1. 在 SharePoint Server 场中的 Web 服务器上安装联机服务管理工具。

  2. 配置服务器到服务器身份验证:

    • 设置您将在后续步骤中使用的变量。

    • 将内置的 SharePoint Server STS 证书上传到 Microsoft 365 中的 SharePoint。

    • 将服务主体名称 (SPN) 添加到 Azure。

    • 将 SharePoint in Microsoft 365 应用程序主体对象 ID 注册到本地 SharePoint Server。

    • 在本地 SharePoint Server 场和 SharePoint in Microsoft 365 之间配置常规身份验证领域。

    • 在本地配置Microsoft Entra应用程序代理。

安装联机服务管理工具并配置 Windows PowerShell 窗口

要继续,你需要在内部部署 SharePoint Server Web 服务器上安装以下工具:

  • Microsoft Graph PowerShell

  • SharePoint in Microsoft 365 命令行管理程序

这在 SharePoint 场中的 Web 服务器上最容易实现,因为与未安装 SharePoint Server 的服务器相比,在 Web 服务器上加载 Microsoft.SharePoint.PowerShell 管理单元更容易。

对 SharePoint Server、Microsoft 365 中的 SharePoint 和 Microsoft Entra ID 进行身份验证需要不同的用户帐户。 有关如何确定要使用的帐户的信息,请参阅混合配置和测试所需的帐户

注意

为了更轻松地完成本部分中的步骤,我们将在 SharePoint Server Web 服务器上打开 PowerShell 命令提示符窗口,并添加模块和管理单元,以便连接到 SharePoint Server、Microsoft 365 中的 SharePoint 以及Microsoft Entra ID。 (我们将在本文中稍后提供有关如何执行此操作的详细步骤。) 然后,我们将保持此窗口打开状态,以用于本文中所有剩余的 PowerShell 步骤。

安装联机服务管理工具并配置 PowerShell 窗口:

  1. 安装 最新版本的 Microsoft Graph PowerShell

  2. 安装 SharePoint in Microsoft 365 命令行管理程序:

    SharePoint in Microsoft 365 命令行管理程序(64 位版本)

    有关详细信息,请参阅 SharePoint in Microsoft 365 命令行管理程序简介

  3. 打开一个 PowerShell 窗口。

  4. 为帮助确保您不会填充缓冲区且不会丢失任何命令历史记录,请增加 PowerShell 窗口的缓冲大小:

  5. 选择 PowerShell 窗口的左上角,然后选择“属性”。

  6. 在 PowerShell 的“属性”窗口选择“布局”选项卡。

  7. 在“屏幕缓冲区大小”下,将“高度”字段设置为“9999”,然后单击“确定”。

  8. 此步骤将加载您已下载的模块,您可将其用于 PowerShell 会话。 将以下命令复制到 PowerShell 会话,然后按 Enter 键。

    Add-PSSnapin Microsoft.SharePoint.PowerShell
    Import-Module Microsoft.PowerShell.Utility
    Import-Module Microsoft.Graph
    

    如果稍后需要再次运行任一配置步骤,请务必再次运行这些命令,在 PowerShell 中加载所需的模块和管理单元。

  9. 在 PowerShell 命令提示符处,输入以下命令以登录 SharePoint in Microsoft 365:

       Connect-MgGraph -Scopes "Group.ReadWrite.All","RoleManagement.ReadWrite.Directory"
    

    系统会提示登录。 需要使用 Microsoft 365 全局管理员帐户登录。 可以探索 连接到 Microsoft Graph 的其他方法

    使 PowerShell 窗口保持打开状态,直到完成本文中的所有步骤。 在接下来的各节中,您在多个过程中都需要使用此窗口。

配置服务器到服务器 (S2S) 身份验证

现在,你已安装工具,使你能够在 Microsoft 365 中远程管理Microsoft Entra ID 和 SharePoint,接下来就可以设置服务器到服务器的身份验证了。

关于您将创建的变量

本节介绍了您将在下面过程中设置的变量。 这些变量包含在很多其余配置步骤中使用的重要信息。

变量 Comments
$spcn 公共域的根域名。 该值不应是 URL 的形式;它应该 只是域名不包含协议
例如,adventureworks.com。
$spsite 本地主 Web 应用程序的内部 URL,如 http://sharepointhttps://sharepoint.adventureworks.com 。 该值是使用正确协议的完整 URL( http: // 或 https:// )。
这是您用于混合功能的 Web 应用程序的内部 URL:
例如,http://sharepoint 或 https://sharepoint.adventureworks.com
$site 您的本地主 Web 应用程序的对象。 填充此变量的命令将获取您在 $spsite 变量中指定的站点的对象。
此变量将自动填充。
$spoappid Microsoft 365 应用程序中的 SharePoint 主体 ID 始终为 000000003-0000-0ff1-ce00-0000000000000。 此泛型值标识 Microsoft 365 组织中的 Microsoft 365 对象中的 SharePoint。
$spocontextID 上下文 ID (Microsoft 365 租户中 SharePoint 的 ObjectID) 。 此值是标识 Microsoft 365 租户中的 SharePoint 的唯一 GUID。
当您运行命令设置此变量时,将自动检测该值。
$metadataEndpoint Microsoft Entra ID 代理用于连接到Microsoft Entra租户的 URL。
您无需为此变量输入值。

步骤 1. 设置变量

现在您已经确定需要设置的变量,请按照以下说明进行设置。 预先填充最常用的变量有助于您更快地执行其余的步骤。 这些变量将保持填充状态,只要您不关闭 PowerShell 会话。 在看到尖括号 () <> 时,请务必提供准确的信息,并在运行命令之前始终删除尖括号。 不要更改尖括号 之外的 代码。

注意

如果稍后您需要再次执行这些配置步骤,您应该先运行此步骤中的以下 PowerShell 命令,重新填充重要变量。

复制以下变量声明并粘贴到文本编辑器(如记事本)中。 设置特定于您的组织的输入值。 从您使用联机服务管理工具配置的 PowerShell 命令提示符处,运行以下命令。

$spcn="*.<public_root_domain_name>.com"
$spsite=Get-Spsite <principal_web_application_URL>
$site=Get-Spsite $spsite
$spoappid="00000003-0000-0ff1-ce00-000000000000"
$spocontextID = (Get-MgOrganization).Id
$metadataEndpoint = "https://accounts.accesscontrol.windows.net/" + $spocontextID + "/metadata/json/1

填充这些变量后,您可以查看其值,只需在 PowerShell 窗口中输入变量名称即可。 例如,输入 $metadataEndpoint 将返回类似于以下内容的值:

https://accounts.accesscontrol.windows.net/00fceb75-246c-4ac4-a0ad-7124xxxxxxxx/metadata/json/1

步骤 2:将 STS 证书上传到 SharePoint in Microsoft 365

在此步骤中,你将把 SharePoint Server 场的 STS 证书上载到 SharePoint in Microsoft 365 租户,以使 SharePoint Server 和 SharePoint in Microsoft 365 连接到彼此的服务应用程序并进行使用。

将 STS 证书上传到 SharePoint in Microsoft 365 时涉及的体系结构

此步骤中的命令将本地 STS 证书 (公钥仅) 添加到 Microsoft 365 组织的 Microsoft 365 主体对象 中。

在 PowerShell 命令提示符处键入以下命令。

Import-Module Microsoft.Graph.Applications

$params = @{
	keyCredential = @{
		type = "AsymmetricX509Cert"
		usage = "Verify"
		key = [System.Text.Encoding]::ASCII.GetBytes("MIIDYDCCAki...")
	}
	passwordCredential = $null
	proof = "eyJ0eXAiOiJ..."
}

Add-MgServicePrincipalKey -ServicePrincipalId $spoappid -BodyParameter $params

步骤 3:将公共域名的 SPN 添加到Microsoft Entra ID

在此步骤中,将服务主体名称 (SPN) 添加到Microsoft Entra租户。 Microsoft 365 中的 SharePoint 主体对象和贵公司的公共 DNS 命名空间构成 SPN。

与 Active Directory 中的 SPN 函数一样,创建此 SPN 会Microsoft Entra ID 中注册对象,该 ID 用于支持 SharePoint Server 与 Microsoft 365 中的 SharePoint 之间的相互身份验证。 SPN 的基本语法如下:

<服务类型>/<实例名称>

其中:

  • <服务类型> 是 Microsoft 365 中的 SharePoint 主体对象,对于 Microsoft 365 租户中的所有 SharePoint 都是相同的。

  • <实例名称> 为贵公司公共 DNS 域命名空间的 URL,这通常用通配符表示(即使安全通道 SSL 证书为 SAN 证书也是如此)。

下面是一个示例:

00000003-0000-0ff1-ce00-000000000000/*.<public domain name>.com

如果您的证书中的公用名为 sharepoint.adventureworks.com,该 SPN 的语法将如下所示:

00000003-0000-0ff1-ce00-000000000000/*.adventureworks.com

使用通配符值,Microsoft 365 中的 SharePoint 可以验证与该域中 任何主机 的连接。 如果未来需要更改外部终结点(如果您的拓扑中存在一个外部终结点)的主机名或需要更改 SharePoint Server Web 应用程序,这样做会很有帮助。

若要将 SPN 添加到Microsoft Entra ID,请在 Microsoft Graph PowerShell 命令提示符中输入以下命令。

$msp = Get-MgServicePrincipal -Filter "AppId eq '$spoappid'"
$params =@{
  "servicePrincipalNames"="$spoappid/$spcn"
}
Update-MgServicePrincipal -ServicePrincipalId $msp.Id -BodyParameter $params

若要验证是否已设置 SPN,请在 Microsoft Graph PowerShell 命令提示符中输入以下命令。

$msp = Get-MgServicePrincipal -Filter "AppId eq '$spoappid'"
$spns = $msp.ServicePrincipalNames
$spns

你应该会看到 Microsoft 365 组织中的 SharePoint in Microsoft 365 的当前 SPN 列表,其中一个 SPN 应该包含你的公共根域名,前面加上 SharePoint in Microsoft 365 应用程序主体 ID。 此注册为通配符注册,应如以下示例所示:

00000003-0000-0ff1-ce00-000000000000/*.<public domain name>.com

这应该是包含公共根域名的列表中唯一的一个 SPN。

步骤 4:使用 SharePoint in Microsoft 365 应用程序主体对象 ID 注册到 SharePoint Server

此步骤在本地 SharePoint in Microsoft 365 应用程序管理服务中注册 SharePoint in Microsoft 365 应用程序主体对象 ID,从而允许 SharePoint Server 使用 OAuth 向 SharePoint in Microsoft 365 进行身份验证。

在 PowerShell 命令提示符处键入以下命令。

$spoappprincipalID = (Get-MgServicePrincipal -Filter "servicePrincipalName eq '$spoappid'").Id
$sponameidentifier = "$spoappprincipalID@$spocontextID"
$appPrincipal = Register-SPAppPrincipal -site $site.rootweb -nameIdentifier $sponameidentifier -displayName "SharePoint"

要验证此步骤,请在 PowerShell 命令提示符处键入 $appPrincipal 变量:

$appPrincipal | fl

预期输出是对带有名称 SharePoint Online 的已注册应用程序主体的描述,如下图所示。

SharePoint in Microsoft 365 中已注册的应用程序主体

步骤 5:设置 SharePoint in Microsoft 365 身份验证领域

此步骤将 SharePoint Server 场的身份验证领域设置为组织中 Microsoft 365 组织的上下文 ID。

在 PowerShell 命令提示符处输入以下命令:

Set-SPAuthenticationRealm -realm $spocontextID

要验证此步骤,请在 PowerShell 命令提示符处输入以下命令:

$spocontextID
Get-SPAuthenticationRealm

每个命令的输出均为表示 SharePoint in Microsoft 365 租户上下文 ID 的 GUID。 这些 GUID 应该相同。

重要

[!重要说明] 如果已经配置了指定场身份验证领域值的场安装脚本,应在再次运行脚本之前,使用这个新的值更新这些安装脚本。 > 有关服务器场设置脚本中领域值的要求的详细信息,请参阅 在 SharePoint Server 中规划服务器到服务器身份验证。 由于当前已将此 SharePoint 场配置为参与混合配置,因此,SharePoint 场身份验证领域值必须始终匹配租户的上下文标识符。 如果您更改了此值,则场将不再参与混合功能。

步骤 6:为Microsoft Entra ID 配置本地代理

在此步骤中,将在 SharePoint Server 场中创建Microsoft Entra ID 代理服务。 这使 Microsoft Entra ID 作为受信任的令牌颁发者,SharePoint Server 将使用该 ID 对 Microsoft 365 中的 SharePoint 中的声明令牌进行签名和身份验证。

在 PowerShell 命令提示符处输入以下命令。

New-SPAzureAccessControlServiceApplicationProxy -Name "ACS" -MetadataServiceEndpointUri $metadataEndpoint -DefaultProxyGroup
New-SPTrustedSecurityTokenIssuer -MetadataEndpoint $metadataEndpoint -IsTrustBroker:$true -Name "ACS"

若要验证 New-SPAzureAccessControlServiceApplicationProxy 命令,请执行以下操作:

  1. 浏览 SharePoint 2016 管理中心网站,然后选择“安全性”>“一般安全性”>“管理信任”。

  2. 确保存在名称以 ACS 开头的条目,并输入可信服务使用者

    要验证此步骤,请在 PowerShell 命令提示符处输入以下命令。

    Get-SPTrustedSecurityTokenIssuer
    

    预期的输出是对场的可信令牌颁发者的描述,其中 RegisteredIssuerName 属性的值如下:

    00000001-0000-0000-c000-000000000000@<context ID>

    其中:

    • <context ID> 是 Microsoft 365 租户中 SharePoint 的上下文 ID,它是 $spocontextID 变量中的值。

从 2021 年 10 月开始,需要一个额外的步骤来调整现有的 SharePoint 混合配置,以便使用新的 Microsoft 365 搜索引擎并进行身份验证。

脚本必须在安装 SharePoint 本地 (2013、2016 或 2019) 的服务器上运行。 该脚本将尝试在运行它的服务器上安装所需的模块依赖项 (MSOnline、AzureAD) 。

  1. 下载 配置脚本

  2. 从下载脚本的目录中,使用 SharePoint 本地场管理员帐户执行脚本,使用以下命令:

    Update-FederatedHybridSearchForM365.ps1 -HybridWebApp YourHybridWebApplication -Force
    

    有关参数值的详细信息,请运行以下命令:

    Get-Help .\Update-FederatedHybridSearchForM365.ps1
    
  3. 出现提示时,请使用 Microsoft 365 全局管理员帐户登录。

  4. 等待脚本执行完成;如果有任何问题,请联系 Microsoft 支持部门。

  5. 脚本执行后,实现此更改后,用户将不会看到任何更改。

步骤 8 (仅 SharePoint Server 2013) :授予新应用程序主体 QueryAsUserIgnoreAppPrincipal 权限

SharePoint Server 2013 需要每个联合查询中的隐藏约束。 反向代理返回在反向代理网站本身中编制索引的文档,而不是按预期返回内部本地搜索网站。 若要避免这种情况,需要在 SharePoint Server 2013 管理网站中执行以下步骤:

  1. 转到 <CentralAdminURL>/_layouts/appinv.aspx 并搜索 c3959f3a-5ad4-4d2b-b1f0-bc70f9a5d0a1,应在其中找到 Greenland Federated Search Bot Skill

  2. 如果“应用域”字段中存在项目,请将其保留为 ;如果为空,请使用 localhost。

  3. 在重定向 URL 中,使用 https://localhost.

  4. 在“权限请求 XML”字段中,粘贴以下 XML 摘录:

    <AppPermissionRequests>
    <AppPermissionRequest Scope="http://sharepoint/search" Right="QueryAsUserIgnoreAppPrincipal" />
    </AppPermissionRequests>
    
  5. 配置页应类似于以下屏幕截图。 最后,选择“创建”。

向 QueryAsUserIgnoreAppPrincipal 授予应用权限

验证及后续步骤

完成本主题中的任务及其验证步骤后,应检查 SSO 和目录同步配置。

您记录了已执行的步骤,因此应该将 PowerShell 缓冲区的全部内容捕捉到文件中。 如果您需要参考配置历史记录以进行故障排除或用于其他目的,这将非常重要。 如果配置跨越数天或涉及多位人员,这也可以帮助您找到上次暂停的地方。

完成并验证此主题中的配置任务后,继续执行你的配置路线图

另请参阅

SharePoint Server 的混合配置

安装和配置 SharePoint Server 混合