共用方式為


教學課程:在 Microsoft Entra ID 和 SharePoint 內部部署間實作同盟驗證

案例描述

在本教學課程中,您可以在 Microsoft Entra ID 和 SharePoint 內部部署間設定同盟驗證。 目標是讓使用者能在 Microsoft Entra ID 上登入,並使用其身分識別,存取 SharePoint 內部部署網站。

必要條件

若要執行此設定,您需有下列資源:

  • Microsoft Entra 租用戶。 如果您沒有帳戶,您可以建立免費帳戶
  • SharePoint 2013 伺服器陣列或更新版本。

本文使用下列值:

  • 企業應用程式名稱 (Microsoft Entra ID):SharePoint corporate farm
  • 信任識別碼 (Microsoft Entra ID) / 領域 (SharePoint):urn:sharepoint:federation
  • loginUrl (Microsoft Entra ID):https://login.microsoftonline.com/dc38a67a-f981-4e24-ba16-4443ada44484/wsfed
  • SharePoint 網站 URL:https://spsites.contoso.local/
  • SharePoint 網站回覆 URL:https://spsites.contoso.local/_trust/
  • SharePoint 信任設定名稱:MicrosoftEntraTrust
  • Microsoft Entra 測試使用者的 UserPrincipalName:AzureUser1@demo1984.onmicrosoft.com

在 Microsoft Entra ID 中設定企業應用程式

若要在 Microsoft Entra ID 中設定同盟,您必須建立專屬企業應用程式。 設定過程使用預先設定的範本 SharePoint on-premises (可在應用程式庫中找到) 簡化。

建立企業應用程式

  1. 以至少 雲端應用程式系統管理員 的身分登入 Microsoft Entra 系統管理中心
  2. 瀏覽至 [身分識別] > [應用程式] > [企業應用程式] > [新增應用程式]
  3. 在搜尋方塊中,輸入 SharePoint 內部部署。 從結果窗格中選取 [SharePoint 內部部署]
  4. 指定應用程式的名稱 (在本教學課程中為 SharePoint corporate farm),然後按一下 [建立] 以新增應用程式。
  5. 在新的企業應用程式中,選取 [屬性],然後檢查 [需要使用者指派?] 的值。 針對此情節,請將其值設定為 [否],然後按一下 [儲存]

設定企業應用程式

在本節中,您會設定 SAML 驗證,並定義成功驗證時將傳送至 SharePoint 的宣告。

  1. 在企業應用程式 SharePoint corporate farm 的 [概觀] 中,選取 2。設定單一登入,並且在下一個對話方塊中選擇 SAML

  2. 在 [以 SAML 設定單一登入] 頁面上,選取 [基本 SAML 設定] 窗格中的 [編輯] 圖示。

  3. 在 [基本 SAML 組態] 區段中,遵循下列步驟:

    1. 在 [識別碼] 方塊中,確認有此值:urn:sharepoint:federation

    2. 在 [回覆 URL] 方塊中,輸入以下模式的 URL:https://spsites.contoso.local/_trust/

    3. 在 [登入 URL] 方塊中,輸入以下模式的 URL:https://spsites.contoso.local/

    4. 選取 [儲存]。

  4. 在 [使用者屬性與宣告] 區段中,刪除下列宣告類型,因 SharePoint 不會用來授與權限,所以無用處:

    • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
    • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname
    • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname
  5. 設定現在看起來應該像這樣:

    SAML 基本設定

  6. 複製稍後在 SharePoint 中所需的資訊:

    • 在 [SAML 簽署憑證] 區段中,[下載] [憑證 (Base64)]。 這是 Microsoft Entra ID 用來簽署 SAML 權杖的簽署憑證公開金鑰。 SharePoint 需要此金鑰來確認傳入 SAML 權杖的完整性。

    • 在 [設定 SharePoint corporate farm] 區段中,在記事本中複製 [登入 URL],並以 /wsfed 取代後置字串 /saml2

    重要

    務必以 /wsfed 取代 /saml2,確保 Microsoft Entra ID 在 SharePoint 要求時簽發 SAML 1.1 權杖。

    • 在 [設定 SharePoint corporate farm] 區段中,複製 [登出 URL]

設定 SharePoint 信任Microsoft Entra ID

在 SharePoint 中建立信任

在此步驟中,您會建立 SPTrustedLoginProvider,儲存 SharePoint 信任 Microsoft Entra ID 所需的設定。 為此,您需要上面複製Microsoft Entra ID 的資訊。請注意,使用 Windows PowerShell 可能會使某些命令失敗。啟動 SharePoint 管理命令介面並執行下列腳本來建立它:

# Path to the public key of the Microsoft Entra SAML signing certificate (self-signed), downloaded from the Enterprise application in the Azure portal
$signingCert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("C:\Microsoft Entra app\SharePoint corporate farm.cer")
# Unique realm (corresponds to the "Identifier (Entity ID)" in the Microsoft Entra enterprise application)
$realm = "urn:sharepoint:federation"
# Login URL copied from the Microsoft Entra enterprise application. Make sure to replace "saml2" with "wsfed" at the end of the URL:
$loginUrl = "https://login.microsoftonline.com/dc38a67a-f981-4e24-ba16-4443ada44484/wsfed"

# Define the claim types used for the authorization
$userIdentifier = New-SPClaimTypeMapping -IncomingClaimType "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" -IncomingClaimTypeDisplayName "name" -LocalClaimType "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"
$role = New-SPClaimTypeMapping "http://schemas.microsoft.com/ws/2008/06/identity/claims/role" -IncomingClaimTypeDisplayName "Role" -SameAsIncoming

# Let SharePoint trust the Microsoft Entra signing certificate
New-SPTrustedRootAuthority -Name "Microsoft Entra signing certificate" -Certificate $signingCert

# Create a new SPTrustedIdentityTokenIssuer in SharePoint
$trust = New-SPTrustedIdentityTokenIssuer -Name "MicrosoftEntraTrust" -Description "Microsoft Entra ID" -Realm $realm -ImportTrustCertificate $signingCert -ClaimsMappings $userIdentifier, $role -SignInUrl $loginUrl -IdentifierClaim $userIdentifier.InputClaimType

設定 SharePoint Web 應用程式

在此步驟中,您會在 SharePoint 中設定 Web 應用程式,信任上方建立的 Microsoft Entra 企業應用程式。 要注意的重要規則:

  • SharePoint Web 應用程式的預設區域必須啟用 Windows 驗證。 這是搜尋編目程式的必要項目。
  • 將使用 Microsoft Entra 驗證的 SharePoint URL,必須使用 HTTPS 設定。
  1. 建立或擴充 Web 應用程式。 本文說明兩種可能的設定:

    • 如果您建立新 Web 應用程式,在預設區域中同時使用 Windows 和 Microsoft Entra 驗證:

      1. 啟動 [SharePoint 管理命令介面],然後執行下列指令碼:

        # This script creates a new web application and sets Windows and Microsoft Entra authentication on the Default zone
        # URL of the SharePoint site federated with Microsoft Entra
        $trustedSharePointSiteUrl = "https://spsites.contoso.local/"
        $applicationPoolManagedAccount = "Contoso\spapppool"
        
        $winAp = New-SPAuthenticationProvider -UseWindowsIntegratedAuthentication -DisableKerberos:$true
        $sptrust = Get-SPTrustedIdentityTokenIssuer "MicrosoftEntraTrust"
        $trustedAp = New-SPAuthenticationProvider -TrustedIdentityTokenIssuer $sptrust    
        
        New-SPWebApplication -Name "SharePoint - Microsoft Entra" -Port 443 -SecureSocketsLayer -URL $trustedSharePointSiteUrl -ApplicationPool "SharePoint - Microsoft Entra" -ApplicationPoolAccount (Get-SPManagedAccount $applicationPoolManagedAccount) -AuthenticationProvider $winAp, $trustedAp
        
      2. 開啟 [SharePoint 管理中心] 網站。

      3. 在 [系統設定] 下,選取 [設定備用存取對應]。 [備用存取對應集合] 方塊隨即開啟。

      4. 使用新的 Web 應用程式篩選顯示內容,並確認您看到如下所示的內容:

        Web 應用程式的替代存取對應

    • 如果您擴充現有 Web 應用程式,在新區域使用 Microsoft Entra 驗證:

      1. 啟動 [SharePoint 管理命令介面],然後執行下列指令碼:

        # This script extends an existing web application to set Microsoft Entra authentication on a new zone
        # URL of the default zone of the web application
        $webAppDefaultZoneUrl = "http://spsites/"
        # URL of the SharePoint site federated with ADFS
        $trustedSharePointSiteUrl = "https://spsites.contoso.local/"
        $sptrust = Get-SPTrustedIdentityTokenIssuer "MicrosoftEntraTrust"
        $ap = New-SPAuthenticationProvider -TrustedIdentityTokenIssuer $sptrust
        $wa = Get-SPWebApplication $webAppDefaultZoneUrl
        
        New-SPWebApplicationExtension -Name "SharePoint - Microsoft Entra" -Identity $wa -SecureSocketsLayer -Zone Internet -Url $trustedSharePointSiteUrl -AuthenticationProvider $ap
        
      2. 開啟 [SharePoint 管理中心] 網站。

      3. 在 [系統設定] 下,選取 [設定備用存取對應]。 [備用存取對應集合] 方塊隨即開啟。

      4. 使用已擴充的 Web 應用程式篩選顯示內容,並確認您看到如下所示的內容:

        擴充 Web 應用程式的替代存取對應

建立 Web 應用程式之後,您可以建立根網站集合,並將您 Windows 帳戶新增為主要網站集合管理員。

  1. 建立 SharePoint 網站的憑證

    由於 SharePoint URL 使用 HTTPS 通訊協定 (https://spsites.contoso.local/),所以必須在相應 Internet Information Services (IIS) 網站上設定憑證。 請依照下列步驟,產生自我簽署憑證:

    重要

    自我簽署憑證僅適合供測試使用。 在實際執行環境中,強烈建議改用憑證授權單位簽發的憑證。

    1. 開啟 Windows PowerShell 主控台。

    2. 執行下列指令碼,以產生自我簽署憑證,並將其新增至電腦 MY 存放區:

      New-SelfSignedCertificate -DnsName "spsites.contoso.local" -CertStoreLocation "cert:\LocalMachine\My"
      
  2. 在 IIS 網站中設定憑證

    1. 開啟 [Internet Information Services 管理員] 主控台。
    2. 展開樹狀檢視中的伺服器,展開 [網站],選取網站 [SharePoint - Microsoft Entra ID],並且選取 [繫結]
    3. 選取 [https 繫結],然後選取 [編輯]
    4. 在 [TLS/SSL 憑證] 欄位中,選擇要使用的憑證 (如在上方建立的 [spsites.contoso.local]),然後選取 [確定]

    注意

    如果有多個 Web 前端伺服器,必須在每個伺服器上重複執行此作業。

SharePoint 與 Microsoft Entra ID 之間的信任基本設定現已完成。 讓我們來看看如何以 Microsoft Entra 使用者身分登入 SharePoint 網站。

以成員使用者身分登入

Microsoft Entra ID 有兩種使用者:來賓使用者和成員使用者。 讓我們從成員使用者開始,這只是您組織中的使用者。

在 Microsoft Entra ID 中建立成員使用者

  1. 以至少是使用者管理員的身分登入 Microsoft Entra 系統管理中心
  2. 瀏覽至 [身分識別]>[使用者]>[所有使用者]。
  3. 在畫面頂端選取 [新增使用者]>[建立新使用者]
  4. 在 [使用者] 屬性中,執行下列步驟:
    1. 在 [顯示名稱] 欄位中輸入 B.Simon
    2. 在 [使用者主體名稱] 欄位中輸入 username@companydomain.extension。 例如: B.Simon@contoso.com
    3. 選取 [顯示密碼] 核取方塊,然後記下 [密碼] 方塊中顯示的值。
    4. 選取 [檢閱 + 建立]
  5. 選取 建立
  6. 您可以與此使用者共用網站,並允許存取該網站。

在 SharePoint 中將權限授與 Microsoft Entra 使用者

以您的 Windows 帳戶 (網站集合管理員) 登入 SharePoint 根網站集合,然後按一下 [共用]
在對話方塊中,您必須輸入 userprincipalname 的確切值 (如 AzureUser1@demo1984.onmicrosoft.com),並謹慎選取 [name] 宣告結果 (將滑鼠移到結果上,查看其宣告類型)

重要

請謹慎輸入您想邀請之使用者的確切值,然後在清單中選擇適當宣告類型,否則無法共用。

螢幕擷取畫面:沒有 EntraCP 的人員選擇器結果。

這項限制是因為 SharePoint 不會驗證人員選擇器的輸入,這可能會令人困惑,並導致拼錯或使用者不小心選擇錯誤宣告類型。
若要修正此案例,可藉由 Microsoft Entra ID 使用稱為 EntraCP 的開放原始碼解決方案連接 SharePoint 2019 / 2016 / 2013,並解析 Microsoft Entra 租用戶的輸入。 如需詳細資訊,請參閱 EntraCP

以下是設定 EntraCP 的相同搜尋:SharePoint 會根據輸入,傳回實際使用者:

螢幕擷取畫面:有 EntraCP 的人員選擇器結果。

重要

EntraCP 不是 Microsoft 產品,所以 Microsoft 支援服務不提供支援。 若要在內部部署 SharePoint 伺服器陣列上下載、安裝及設定 EntraCP,請參閱 EntraCP 網站。

Microsoft Entra 使用者 AzureUser1@demo1984.onmicrosoft.com 現在可以使用自己的身分識別,登入 SharePoint 網站 https://spsites.contoso.local/

授與權限給安全性群組

將群組宣告類型新增至企業應用程式

  1. 在企業應用程式 SharePoint corporate farm 的 [概觀] 中,選取 2。設定單一登入

  2. 如果沒有群組宣告,請在 [使用者屬性與宣告] 區段中,依照下列步驟執行:

    1. 選取 [新增群組宣告],選取 [安全性群組],確認 [來源屬性] 設定為 [群組識別碼]
    2. 勾選 [自訂群組宣告的名稱],接著勾選 [以角色宣告名義發出群組],然後按一下 [儲存]
    3. [使用者屬性與宣告] 應如下所示:

    使用者和群組的宣告

在 Microsoft Entra ID 中建立安全性群組

讓我們建立安全性群組。

  1. 瀏覽至 [身分識別]>[群組]

  2. 選取新增群組

  3. 填寫 [群組類型] ([安全性])、[群組名稱] (如 AzureGroup1) 和 [成員資格類型]。 將您在上方建立的使用者新增為成員,然後選取 [建立]

    建立 Microsoft Entra 安全性群組

在 SharePoint 中授與權限給安全性群組

Microsoft Entra 安全性群組可以其屬性 Id 識別,這是 GUID (如 00aa00aa-bb11-cc22-dd33-44ee44ee44ee)。
如果沒有自訂宣告提供者,使用者必須在人員選擇器中輸入群組的確切值 (Id),然後選取相應宣告類型。 這不方便使用者,也不可靠。
為了避免這種情況,本文使用協力廠商宣告提供者 EntraCP,在 SharePoint 中以容易的方式尋找群組:

人員選擇器搜尋 Microsoft Entra 群組

管理來賓使用者的存取權

來賓帳戶有兩種類型:

  • B2B 來賓帳戶:這些使用者位於外部 Microsoft Entra 租用戶中
  • MSA 來賓帳戶:這些使用者位於 Microsoft 識別提供者 (Hotmail、Outlook) 或社交帳戶提供者 (Google 或類似社交帳戶提供者) 中

Microsoft Entra ID 預設會將 [唯一的使用者識別碼] 和宣告 [name] 設定為屬性 user.userprincipalname
但這個屬性對來賓帳戶而言不明確,如下表所示:

Microsoft Entra ID 中設定的來源屬性 B2B 來賓的 Microsoft Entra ID 使用的實際屬性 MSA 來賓的 Microsoft Entra ID 使用的實際屬性 SharePoint 可依賴來驗證身分識別的屬性
user.userprincipalname mail,例如:guest@PARTNERTENANT userprincipalname,例如:guest_outlook.com#EXT#@TENANT.onmicrosoft.com 不明確
user.localuserprincipalname userprincipalname,例如:guest_PARTNERTENANT#EXT#@TENANT.onmicrosoft.com userprincipalname,例如:guest_outlook.com#EXT#@TENANT.onmicrosoft.com userprincipalname

總而言之,為了確保來賓帳戶均能以相同屬性識別,企業應用程式的識別碼宣告應更新為使用屬性 user.localuserprincipalname,而不是 user.userprincipalname

更新應用程式以對所有來賓使用者使用一致的屬性

  1. 在企業應用程式 SharePoint corporate farm 的 [概觀] 中,選取 2。設定單一登入

  2. 在 [以 SAML 設定單一登入] 頁面上,選取 [使用者屬性與宣告] 窗格中的 [編輯] 圖示。

  3. 在 [使用者屬性與宣告] 區段中,依照下列步驟執行:

    1. 選取 [唯一的使用者識別碼 (名稱識別碼)],將其 [來源屬性] 屬性變更為 user.localuserprincipalname,然後按一下 [儲存]

    2. 選取 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name,將其 [來源屬性] 屬性變更為 user.localuserprincipalname,然後按一下 [儲存]

    3. [使用者屬性與宣告] 應如下所示:

    使用者屬性和來賓宣告

在 SharePoint 中邀請來賓使用者

注意

本節假設使用宣告提供者 EntraCP

在上一節中,您已將企業應用程式更新為對所有來賓帳戶使用一致的屬性。
現在必須更新 EntraCP 的設定以反映該變更,並為來賓帳戶使用屬性 userprincipalname

  1. 開啟 [SharePoint 管理中心] 網站。
  2. 在 [安全性] 中,選取 [EntraCP 全域設定]
  3. 在 [使用者識別碼屬性] 區段中:將 [「來賓」使用者的使用者識別碼:] 設定為 UserPrincipalName
  4. 按一下 [確定]。

您現在可在 SharePoint 網站中邀請任何來賓使用者。

為多個 Web 應用程式設定同盟

此組態適用於單一 Web 應用程式,但是如果您想要對多個 Web 應用程式使用相同受信任的識別提供者,則需要額外的組態。 舉例來說,假設您有另一個 Web 應用程式 https://otherwebapp.contoso.local/,您現在想要在其上啟用 Microsoft Entra 驗證。 若要啟用,請設定 SharePoint 以傳遞 SAML WReply 參數,並在企業應用程式中新增 URL。

設定 SharePoint 以傳遞 SAML WReply 參數

  1. 在 SharePoint 伺服器上,開啟 SharePoint 201x 管理命令介面,然後執行下列命令。 使用您先前使用的相同受信任身分識別權杖簽發者名稱。
$t = Get-SPTrustedIdentityTokenIssuer "MicrosoftEntraTrust"
$t.UseWReplyParameter = $true
$t.Update()

在企業應用程式中新增 URL

  1. 以至少 雲端應用程式系統管理員 的身分登入 Microsoft Entra 系統管理中心

  2. 瀏覽至 [身分識別]>[應用程式]>[企業應用程式]> 選取先前建立的企業應用程式,並且選取 [單一登入]

  3. 在 [以 SAM 設定單一登入] 頁面上,編輯 [基本 SAML 組態]

  4. 在 [回覆 URL (判斷提示取用者服務 URL)] 區段中,新增須使用 Microsoft Entra ID 登入使用者的其他全部 Web 應用程式 URL (如 https://otherwebapp.contoso.local/),並且按一下 [儲存]

指定其他 Web 應用程式

設定安全性權杖的存留期

根據預設,Microsoft Entra ID 會建立有效期限為 1 小時的 SAML 權杖,該權杖無法在 Azure 入口網站或使用條件式存取原則進行自訂。
不過,您可以建立自訂權杖存留期原則,並將它指派給您為 SharePoint Server 建立的企業應用程式。
您可以執行下列指令碼來達成此目的:

Install-Module Microsoft.Graph
Connect-MgGraph -Scopes "Policy.ReadWrite.ApplicationConfiguration","Policy.Read.All","Application.ReadWrite.All"

$appDisplayName = "SharePoint corporate farm"
$sp = Get-MgServicePrincipal -Search DisplayName:"$appDisplayName" -ConsistencyLevel eventual

$oldPolicy = Get-MgServicePrincipalTokenLifetimePolicy -ServicePrincipalId $sp.Id
if ($null -ne $oldPolicy) {
	# There can be only 1 TokenLifetimePolicy associated to the service principal (or 0, as by default)
    Remove-MgServicePrincipalAppManagementPolicy -AppManagementPolicyId $oldPolicy.Id -ServicePrincipalId $sp.Id
}

# Get / create a custom token lifetime policy
$policyDisplayName = "WebPolicyScenario"
$policy = Get-MgPolicyTokenLifetimePolicy -Filter "DisplayName eq '$policyDisplayName'"
if ($null -eq $policy) {
	$params = @{
		Definition = @('{"TokenLifetimePolicy":{"Version":1,"AccessTokenLifetime":"4:00:00"}}') 
		DisplayName = $policyDisplayName
		IsOrganizationDefault = $false
	}
	$policy = New-MgPolicyTokenLifetimePolicy -BodyParameter $params
}

# Assign the token lifetime policy to an app
$body = @{
	"@odata.id" = "https://graph.microsoft.com/v1.0/policies/tokenLifetimePolicies/$($policy.Id)"
}
Invoke-GraphRequest -Uri ('https://graph.microsoft.com/v1.0/servicePrincipals/{0}/tokenLifetimePolicies/$ref' -f $sp.Id) -Method POST -Body $body