配置从 SharePoint Server 到 SharePoint Online 的服务器间身份验证

 

**上一次修改主题:**2017-06-21

**摘要:**了解如何在 SharePoint Server 与 SharePoint Online 之间构建服务器到服务器信任。

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

配置服务器到服务器的身份验证

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

提示

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

验证 Web 应用程序设置

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

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

确认 Web 应用程序满足要求

  1. 确认要执行此过程的用户帐户是 SharePoint 组“Farm Administrators”的成员。

  2. 在管理中心中,单击“应用程序管理”>“管理 Web 应用程序”。

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

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

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

    This figure illustrates the authentication type setting for a web application

配置 OAuth over HTTP(如果需要)

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

备注

如果您将主 Web 应用程序配置为使用 SSL,则不需要执行此步骤,您可以跳到在 SharePoint Online 中为 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 Online 之间配置服务器到服务器身份验证

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

  • SharePoint Server

  • SharePoint Online

  • Azure Active Directory

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

提示

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

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

  1. 在 SharePoint Server 中配置安全令牌服务 (STS):

    • 创建新的 STS 证书。

    • 替换 SharePoint Server 场中每台服务器上的默认 STS 证书。

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

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

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

    • 将新的本地 STS 证书上传到 SharePoint Online。

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

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

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

    • 在本地配置 Azure Active Directory 应用程序代理。

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

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

  • Microsoft Online Services 登录助手

  • 用于 Windows PowerShell 的 Azure Active Directory 模块

  • SharePoint Online 命令行管理程序

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

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

备注

为了更简单地完成本节中的步骤,您应在 SharePoint Server Web 服务器上打开一个 PowerShell 命令提示符窗口,并添加模块和管理单元,以允许您连接到 SharePoint Server、SharePoint Online 和 Azure Active Directory。(我们将在本文后面的部分中向您详细介绍如何执行操作的步骤。)我们还将保持此窗口的打开状态,以供本文中 PowerShell 的所有剩余步骤使用。

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

  1. 安装联机服务管理工具:

    1. 安装 Microsoft Online Services 登录助手:

      适用于 IT 专业人员 BETA 的 Microsoft Online Services 登录助手(64 位版本) (https://go.microsoft.com/fwlink/?LinkId=391943)

      有关详细信息,请参阅适用于 IT 专业人员 RTW 的 Microsoft Online Services 登录助手 (https://go.microsoft.com/fwlink/?LinkId=392322)。

    2. 安装 用于 Windows PowerShell 的 Azure Active Directory 模块:

      Azure Active Directory Module for Windows PowerShell (64 bit version)(适用于 Windows PowerShell 的 Azure Active Directory 模块(64 位版本))(https://go.microsoft.com/fwlink/p/?linkid=236297)

      有关用于 Windows PowerShell 的 Azure Active Directory 模块的详细信息,请参阅 Manage Azure Active Directory by using Windows PowerShell(使用 Windows PowerShell 管理 Azure Active Directory)(https://aka.ms/aadposh)。

    3. 安装 SharePoint Online 命令行管理程序:

      SharePoint Online Management Shell (64 bit version)(SharePoint Online 命令行管理程序(64 位版本))(https://go.microsoft.com/fwlink/?LinkId=392323)

      有关详细信息,请参阅 SharePoint Online 命令行管理程序简介 (https://go.microsoft.com/fwlink/?LinkId=392324)。

  2. 打开一个 PowerShell 窗口。

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

    1. 在 PowerShell 窗口的左上角单击,然后单击“属性”。

    2. 在 PowerShell的“属性”窗口中单击“布局”选项卡。

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

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

    Add-PSSnapin Microsoft.SharePoint.PowerShell
    Import-Module Microsoft.PowerShell.Utility
    Import-Module MSOnline -force
    Import-Module MSOnlineExtended -force
    Import-Module Microsoft.Online.SharePoint.PowerShell -force
    

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

  5. 在 Microsoft PowerShell 中配置远程:

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

    enable-psremoting
    new-pssession
    

    有关详细信息,请参阅 about_Remote_Requirements (https://go.microsoft.com/fwlink/?LinkId=392326).

  6. 要登录到 SharePoint Online 租户,请在 PowerShell 命令提示符处键入以下命令。

    $cred=Get-Credential
    Connect-MsolService -Credential $cred
    

    系统提示您进行登录。您需使用 Office 365 全局管理员帐户进行登录。

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

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

现在您已安装好工具,可以远程管理 Azure Active Directory 和 SharePoint Online,您已准备好设置服务器到服务器身份验证。

关于您将创建的变量

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

Variable

Comments

$spcn

公共域的根域名。该值不应是 URL 的形式;它应该只是域名不包含协议

例如,adventureworks.com。

$spsite

本地主 Web 应用程序的内部 URL,如 https://sharepointhttps://sharepoint.adventureworks.com。该值是使用正确协议的完整 URL(http:// 或 https://)。

这是您用于混合功能的 Web 应用程序的内部 URL:

例如,https://sharepoint 或 https://sharepoint.adventureworks.com。

$site

您的本地主 Web 应用程序的对象。填充此变量的命令将获取您在 $spsite 变量中指定的站点的对象。

此变量将自动填充。

$spoappid

SharePoint Online 应用程序主体 ID 始终为 00000003-0000-0ff1-ce00-000000000000。此常规值可识别 SharePoint Online 租户中的 Office 365 对象。

$spocontextID

SharePoint Online 租户的上下文 ID (ObjectID)。该值是识别你的 SharePoint Online 租户的唯一 GUID。

当您运行命令设置此变量时,将自动检测该值。

$metadataEndpoint

您的 Azure Active Directory 代理用于连接到 Azure Active Directory 租户的 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-MsolCompanyInformation).ObjectID
$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 Online

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

This figure illustrates the architecture involved when a STS certificate is uploaded to SharePoint Online

此步骤中的命令将新的本地 STS 证书(仅公钥)添加到 Office 365 租户的 SharePoint Online 主体对象

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

$stsCert=(Get-SPSecurityTokenServiceConfig).LocalLoginProvider.SigningCertificate
$binCert = $stsCert.GetRawCertData()
$credValue = [System.Convert]::ToBase64String($binCert);
New-MsolServicePrincipalCredential -AppPrincipalId $spoappid -Type asymmetric -Usage Verify -Value $credValue

步骤 3:将公共域名的 SPN 添加到 Azure Active Directory

这一步是将服务主体名称 (SPN) 添加到 Azure Active Directory 租户。SPN 由 SharePoint Online 主体对象和公司的公共 DNS 命名空间组成。

与 Active Directory 中的 SPN 功能一样,创建此 SPN 将在 Azure Active Directory 中注册一个对象,用于支持 SharePoint Server 和 SharePoint Online 租户之间的相互身份验证。SPN 的基本语法如下:

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

其中:

  • <服务类型> 是 SharePoint Online 主体对象,它同样适用于所有 SharePoint Online 租户。

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

下面是一个示例:

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

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

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

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

要将 SPN 添加到 Azure Active Directory,请在 用于 Windows PowerShell 的 Azure Active Directory 模块 命令提示符输入以下命令。

$msp = Get-MsolServicePrincipal -AppPrincipalId $spoappid
$spns = $msp.ServicePrincipalNames
$spns.Add("$spoappid/$spcn") 
Set-MsolServicePrincipal -AppPrincipalId $spoappid -ServicePrincipalNames $spns

若要验证是否设置了 SPN,请在 用于 Windows PowerShell 的 Azure Active Directory 模块 命令提示符处输入以下命令。

$msp = Get-MsolServicePrincipal -AppPrincipalId $spoappid
$spns = $msp.ServicePrincipalNames 
$spns

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

00000003-0000-0ff1-ce00-000000000000/*.< 公共域名 >.com

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

步骤 4:在 SharePoint Server 中注册 SharePoint Online 应用程序主体对象 ID

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

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

$spoappprincipalID = (Get-MsolServicePrincipal -ServicePrincipalName $spoappid).ObjectID
$sponameidentifier = "$spoappprincipalID@$spocontextID"
$appPrincipal = Register-SPAppPrincipal -site $site.rootweb -nameIdentifier $sponameidentifier -displayName "SharePoint Online"

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

$appPrincipal | fl

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

This figure illustrates the registered application principal for SharePoint Online

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

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

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

Set-SPAuthenticationRealm -realm $spocontextID

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

$spocontextID
 Get-SPAuthenticationRealm

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

重要

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

步骤 6:配置 Azure Active Directory 的本地代理

在此步骤中,您将在 SharePoint Server 场中创建一个 Azure Active Directory 代理服务,这会将 Azure Active Directory 配置为一个受信任的令牌颁发者,SharePoint Server 可以使用它来签署身份验证声明令牌,还可以验证来自 SharePoint Online 的令牌。

在 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@< 上下文 ID>

其中 <上下文 ID> 是你的 SharePoint Online 租户的上下文 ID,这是你在 $spocontextID 变量中的值。

验证及后续步骤

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

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

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

See also

SharePoint Server 的混合
安装和配置 SharePoint Server 混合