設定從 SharePoint Server 到 SharePoint Online 之間的伺服器對伺服器驗證

 

**適用版本:**SharePoint Online, SharePoint Server 2013, SharePoint Server 2016

**上次修改主題的時間:**2017-06-21

摘要: 了解如何在 SharePoint Server 和 SharePoint Online 之間建立伺服器對伺服器的信任關係。

本文是設定 SharePoint 混合式解決方案程序藍圖的一部分。當您執行本文中的程序時,請確定您遵循藍圖

設定伺服器對伺服器的驗證

本文針對整合 SharePoint Server 和 SharePoint Online 的 SharePoint 混合式環境部署程序提供指引。

提示

請依本文中顯示的順序完成程序,以獲得最可靠的結果。

驗證 Web 應用程式設定

在 SharePoint 混合式架構中,同盟使用者可以將要求從任何 SharePoint Server Web 應用程式傳送至 SharePoint Online,而 Web 應用程式設定成搭配使用整合式 Windows 驗證與 NTLM。

例如,您需要確定想要用於方案的內部部署搜尋中心網站設定成搭配使用整合式 Windows 驗證與 NTLM。如果不是,則需要重新設定 Web 應用程式使用 Windows 驗證與 NTLM 或在 Web 應用程式上使用符合要求的搜尋中心網站。您也需要確定預期從 SharePoint Online 傳回搜尋結果的使用者是同盟使用者。

驗證 Web 應用程式是否符合需求

  1. 確認將執行此程序的使用者帳戶為 SharePoint 伺服器陣列管理員群組的成員。

  2. 在管理中心中,按一下 [應用程式管理] > [管理 Web 應用程式]。

  3. 在 [名稱] 欄中,選取您要驗證的 Web 應用程式,然後按一下功能區上的 [驗證提供者]。

  4. 在 [驗證提供者] 對話方塊的 [區域] 欄中,按一下與搜尋中心網站相關聯的區域。

  5. 在 [編輯驗證] 對話方塊中,驗證已選取 [整合式 Windows 驗證] 和 [NTLM] (如下圖所示)。

    此圖說明 Web 應用程式的驗證規則設定

設定 HTTP 上的 OAuth (如有必要)

依預設,SharePoint Server 中的 OAuth 需要 HTTPS。如果您將主要 Web 應用程式設定為使用 HTTP,而不是 SSL,您必須透過 SharePoint Server 伺服器陣列中每個網頁伺服器上的 HTTP 來啟用 OAuth。

注意

如果您將主要 Web 應用程式設定成使用 SSL,則不需要此步驟,因此可以跳到在 SharePoint Online 中建立和設定 SSL 憑證的目標應用程式

若要在 HTTP 上啟用 OAuth,請在 SharePoint Server 伺服器陣列的每部網頁伺服器上,使用伺服器陣列管理員帳戶從 SharePoint 2016 管理命令介面 命令提示字元執行下列命令。

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

如果已在 HTTP 上啟用 OAuth 進行測試,但想要重新設定環境來使用 SSL,您可以在 SharePoint Server 伺服器陣列的每部網頁伺服器上,使用伺服器陣列管理員帳戶從 SharePoint 2016 管理命令介面 命令提示字元執行下列命令,以便在 HTTP 上停用 OAuth。

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

設定內部部署 SharePoint Server 與 SharePoint Online 之間的伺服器對伺服器驗證

本節將協助您設定下列兩者之間的伺服器對伺服器驗證:

  • SharePoint Server

  • SharePoint Online

  • Azure Active Directory

設定混合式環境的伺服器對伺服器驗證時,請建立 on-premises SharePoint farmSharePoint Onlinetenant之間的 trust relationship (使用 Azure Active Directory 作為信任 Token 簽署服務)。新增必要 PowerShell模組和嵌入式管理單元,此程序可以發生於內部部署 SharePoint 網頁伺服器的單一 PowerShell 視窗中。

提示

您將記錄步驟、執行的 PowerShell Cmdlet,以及任何可能發生的錯誤。您應在完成時擷取 PowerShell 緩衝區的所有內容,再關閉視窗。這樣可提供您所採取步驟的歷程記錄,這在您必須疑難排解程序或向其他人說明程序時十分有用。這也適用於在各階段設定時重新整理記憶體。

以下是本節中您必須完成之程序的高階檢視:

  1. 在 SharePoint Server 中設定 Security Token Service (STS):

    • 建立新的 STS 憑證。

    • 取代 SharePoint Server 伺服器陣列中的各個伺服器上的預設 STS 憑證。

  2. 在 SharePoint Server 伺服器陣列的網頁伺服器上安裝線上服務管理工具。

  3. 設定伺服器對伺服器的驗證:

    • 設定您將在稍後步驟使用的變數。

    • 將新的內部部署 STS 憑證上傳至 SharePoint Online。

    • 將服務主體名稱 (SPN) 新增至 Azure。

    • 向內部部署 SharePoint Server 登錄 SharePoint Online 應用程式主體物件識別碼。

    • 設定內部部署 SharePoint Server 伺服器陣列與 SharePoint Online 之間的一般驗證領域。

    • 設定 Azure Active Directory 應用程式 Proxy 內部部署。

安裝線上服務管理工具並設定 Windows PowerShell 視窗

若要繼續,您需要在內部部署 SharePoint Server 網頁伺服器上安裝這些工具:

  • Microsoft Online Services 登入小幫手

  • Windows PowerShell 的 Azure Active Directory 模組

  • SharePoint Online 管理命令介面

這在 SharePoint 伺服器陣列的網頁伺服器上十分常見,因為在網頁伺服器上載入 Microsoft.SharePoint.PowerShell 嵌入式管理單元,會比在未安裝 SharePoint Server 的伺服器上簡單。

SharePoint Server、SharePoint Online和 Azure Active Directory 的驗證需要不同使用者帳戶。如需如何判斷要使用哪一個帳戶的資訊,請參閱<混合式設定和測試所需的帳戶>。

注意

為了讓您輕鬆完成此節中的步驟,我們將在 SharePoint Server 網頁伺服器上開啟 PowerShell 命令提示字元視窗,並新增模組和嵌入式管理單元,讓您可以與 SharePoint Server、SharePoint Online和 Azure Active Directory連線。(我們將在本文稍後提供您執行此操作的詳細步驟。)接著我們會讓此視窗維持開啟狀態,以用於本文中所有其餘的 PowerShell 步驟。

安裝線上服務管理工具並設定 PowerShell 視窗:

  1. 安裝線上服務管理工具:

    1. 安裝 Microsoft Online Services 登入小幫手:

      適用於 IT 專業人員的 Microsoft Online Services 登入小幫手 BETA (64 位元版本) (https://go.microsoft.com/fwlink/?LinkId=391943)

      如需詳細資訊,請參閱用於 IT 專業人員的 Microsoft Online Services 登入小幫手 RTW (https://go.microsoft.com/fwlink/?LinkId=392322)。

    2. 安裝 Windows PowerShell 的 Azure Active Directory 模組:

      Azure Active Directory Module for Windows PowerShell (64 位元版本) (https://go.microsoft.com/fwlink/p/?linkid=236297)

      如需有關 Windows PowerShell 的 Azure Active Directory 模組 的詳細資訊,請參閱<使用 Windows PowerShell 管理 Windows Azure Active Directory (https://aka.ms/aadposh)。

    3. 安裝 SharePoint Online 管理命令介面:

      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。這個值是使用正確通訊協定 (http:// 或 https://) 的完整 URL。

這是用於混合式功能的 Web 應用程式的內部 URL。

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

$site

內部部署主要 Web 應用程式的物件。填入此變數的命令會取得 $spsite 變數中所指定網站的物件。

會自動填入此變數。

$spoappid

SharePoint Online 應用程式主體識別碼一律是 00000003-0000-0ff1-ce00-000000000000。這個一般值會識別 Office 365 承租人中的 SharePoint Online 物件。

$spocontextID

SharePoint Online 承租人的內容識別碼 (ObjectID)。這個值是可識別 SharePoint Online 承租人的唯一 GUID。

執行命令來設定變數時,會自動偵測這個值。

$metadataEndpoint

Azure Active Directory Proxy 用來與您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 連線以及使用彼此的服務應用程式。

此圖說明將 STS 憑證上傳至 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 命名空間。

就像 SPN 在 Active Directory 中的運作一樣,建立此 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 應用程式主體識別碼)。此登錄是萬用字元登錄,而且應該如下例所示:

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

這應該是含有公用根網域名稱的清單中「唯一」的 SPN。

步驟 4:向 SharePoint Server 登錄 SharePoint Online 應用程式主體物件 ID

這個步驟將向內部部署 SharePoint 應用程式管理服務登錄 SharePoint Online 應用程式主體物件 ID,這允許使用 OAuth 向 SharePoint Online 驗證 SharePoint Server。

在 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 的登錄應用程式主體描述,與下面類似。

此圖說明 SharePoint Online 的已登錄應用程式主體

步驟 5:設定 SharePoint 驗證領域

這個步驟會將 SharePoint Server 伺服器陣列的驗證領域設定為組織 Office 365 租用的內容 ID。

在 PowerShell 命令提示字元處,輸入下列命令。

Set-SPAuthenticationRealm -realm $spocontextID

若要驗證這個步驟,請在 PowerShell 命令提示字元處輸入下列命令。

$spocontextID
 Get-SPAuthenticationRealm

各個命令的輸出是代表 SharePoint Online 租用內容識別碼的 GUID。這些 GUID 應該相同。

重要

如果所設定的伺服器陣列設定指令碼指定伺服器陣列驗證領域值,則應該將設定指令碼更新為新的值。
如需伺服器陣列設定指令碼領域值需求的詳細資訊,請參閱在 SharePoint Server 中規劃伺服器對伺服器的驗證。因為您此時已經設定這個 SharePoint 伺服器陣列參與混合式設定,所以 SharePoint 伺服器陣列驗證領域值必須一律符合租用內容識別碼。如果您變更這個值,伺服器陣列將無法再參與混合式功能。

步驟 6:設定 Azure Active Directory 的內部部署 Proxy

在此步驟中,您會在 SharePoint Server 伺服器陣列中建立 Azure Active Directory Proxy 服務。這會啟用 Azure Active Directory 作為受信任的 Token 發行者,而 SharePoint Server 會將其用來簽署和驗證來自 SharePoint Online 的宣告 Token。

在 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@<內容識別碼>

其中,<內容識別碼> 是 SharePoint Online 租用的內容識別碼,這是 $spocontextID 變數中的值。

驗證和後續步驟

完成此主題中的工作和其驗證步驟後,您應該使用<驗證您的 SSO 設定>中的驗證步驟來檢查 SSO 和「目錄同步處理」的設定。

因此,您會有所採取步驟的歷程記錄,而且應該將 PowerShell 緩衝區的整個內容擷取至檔案。如果您因疑難排解或任何其他原因而需要參照設定歷程記錄,則這十分重要。如果設定跨多天或牽涉多人,則這也可協助您從中斷之處繼續。

完成且驗證此主題中的設定工作後,請繼續執行您的設定藍圖

See also

SharePoint Server 的混合
安裝及設定混合式 SharePoint Server