教學課程:在 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
(可在應用程式庫中找到) 簡化。
建立企業應用程式
- 以至少 雲端應用程式系統管理員 的身分登入 Microsoft Entra 系統管理中心。
- 瀏覽至 [身分識別] > [應用程式] > [企業應用程式] > [新增應用程式]。
- 在搜尋方塊中,輸入 SharePoint 內部部署。 從結果窗格中選取 [SharePoint 內部部署]。
- 指定應用程式的名稱 (在本教學課程中為
SharePoint corporate farm
),然後按一下 [建立] 以新增應用程式。 - 在新的企業應用程式中,選取 [屬性],然後檢查 [需要使用者指派?] 的值。 針對此情節,請將其值設定為 [否],然後按一下 [儲存]。
設定企業應用程式
在本節中,您會設定 SAML 驗證,並定義成功驗證時將傳送至 SharePoint 的宣告。
在企業應用程式
SharePoint corporate farm
的 [概觀] 中,選取 2。設定單一登入,並且在下一個對話方塊中選擇 SAML。在 [以 SAML 設定單一登入] 頁面上,選取 [基本 SAML 設定] 窗格中的 [編輯] 圖示。
在 [基本 SAML 組態] 區段中,遵循下列步驟:
在 [識別碼] 方塊中,確認有此值:
urn:sharepoint:federation
。在 [回覆 URL] 方塊中,輸入以下模式的 URL:
https://spsites.contoso.local/_trust/
。在 [登入 URL] 方塊中,輸入以下模式的 URL:
https://spsites.contoso.local/
。選取 [儲存]。
在 [使用者屬性與宣告] 區段中,刪除下列宣告類型,因 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
設定現在看起來應該像這樣:
複製稍後在 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 設定。
建立或擴充 Web 應用程式。 本文說明兩種可能的設定:
如果您建立新 Web 應用程式,在預設區域中同時使用 Windows 和 Microsoft Entra 驗證:
啟動 [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
開啟 [SharePoint 管理中心] 網站。
在 [系統設定] 下,選取 [設定備用存取對應]。 [備用存取對應集合] 方塊隨即開啟。
使用新的 Web 應用程式篩選顯示內容,並確認您看到如下所示的內容:
如果您擴充現有 Web 應用程式,在新區域使用 Microsoft Entra 驗證:
啟動 [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
開啟 [SharePoint 管理中心] 網站。
在 [系統設定] 下,選取 [設定備用存取對應]。 [備用存取對應集合] 方塊隨即開啟。
使用已擴充的 Web 應用程式篩選顯示內容,並確認您看到如下所示的內容:
建立 Web 應用程式之後,您可以建立根網站集合,並將您 Windows 帳戶新增為主要網站集合管理員。
建立 SharePoint 網站的憑證
由於 SharePoint URL 使用 HTTPS 通訊協定 (
https://spsites.contoso.local/
),所以必須在相應 Internet Information Services (IIS) 網站上設定憑證。 請依照下列步驟,產生自我簽署憑證:重要
自我簽署憑證僅適合供測試使用。 在實際執行環境中,強烈建議改用憑證授權單位簽發的憑證。
開啟 Windows PowerShell 主控台。
執行下列指令碼,以產生自我簽署憑證,並將其新增至電腦 MY 存放區:
New-SelfSignedCertificate -DnsName "spsites.contoso.local" -CertStoreLocation "cert:\LocalMachine\My"
在 IIS 網站中設定憑證
- 開啟 [Internet Information Services 管理員] 主控台。
- 展開樹狀檢視中的伺服器,展開 [網站],選取網站 [SharePoint - Microsoft Entra ID],並且選取 [繫結]。
- 選取 [https 繫結],然後選取 [編輯]。
- 在 [TLS/SSL 憑證] 欄位中,選擇要使用的憑證 (如在上方建立的 [spsites.contoso.local]),然後選取 [確定]。
注意
如果有多個 Web 前端伺服器,必須在每個伺服器上重複執行此作業。
SharePoint 與 Microsoft Entra ID 之間的信任基本設定現已完成。 讓我們來看看如何以 Microsoft Entra 使用者身分登入 SharePoint 網站。
以成員使用者身分登入
Microsoft Entra ID 有兩種使用者:來賓使用者和成員使用者。 讓我們從成員使用者開始,這只是您組織中的使用者。
在 Microsoft Entra ID 中建立成員使用者
- 以至少是使用者管理員的身分登入 Microsoft Entra 系統管理中心。
- 瀏覽至 [身分識別]>[使用者]>[所有使用者]。
- 在畫面頂端選取 [新增使用者]>[建立新使用者]。
- 在 [使用者] 屬性中,執行下列步驟:
- 在 [顯示名稱] 欄位中輸入
B.Simon
。 - 在 [使用者主體名稱] 欄位中輸入 username@companydomain.extension。 例如:
B.Simon@contoso.com
。 - 選取 [顯示密碼] 核取方塊,然後記下 [密碼] 方塊中顯示的值。
- 選取 [檢閱 + 建立]。
- 在 [顯示名稱] 欄位中輸入
- 選取 建立。
- 您可以與此使用者共用網站,並允許存取該網站。
在 SharePoint 中將權限授與 Microsoft Entra 使用者
以您的 Windows 帳戶 (網站集合管理員) 登入 SharePoint 根網站集合,然後按一下 [共用]。
在對話方塊中,您必須輸入 userprincipalname 的確切值 (如 AzureUser1@demo1984.onmicrosoft.com
),並謹慎選取 [name] 宣告結果 (將滑鼠移到結果上,查看其宣告類型)
重要
請謹慎輸入您想邀請之使用者的確切值,然後在清單中選擇適當宣告類型,否則無法共用。
這項限制是因為 SharePoint 不會驗證人員選擇器的輸入,這可能會令人困惑,並導致拼錯或使用者不小心選擇錯誤宣告類型。
若要修正此案例,可藉由 Microsoft Entra ID 使用稱為 EntraCP 的開放原始碼解決方案連接 SharePoint 2019 / 2016 / 2013,並解析 Microsoft Entra 租用戶的輸入。 如需詳細資訊,請參閱 EntraCP。
以下是設定 EntraCP 的相同搜尋:SharePoint 會根據輸入,傳回實際使用者:
重要
EntraCP 不是 Microsoft 產品,所以 Microsoft 支援服務不提供支援。 若要在內部部署 SharePoint 伺服器陣列上下載、安裝及設定 EntraCP,請參閱 EntraCP 網站。
Microsoft Entra 使用者 AzureUser1@demo1984.onmicrosoft.com
現在可以使用自己的身分識別,登入 SharePoint 網站 https://spsites.contoso.local/
。
授與權限給安全性群組
將群組宣告類型新增至企業應用程式
在企業應用程式
SharePoint corporate farm
的 [概觀] 中,選取 2。設定單一登入。如果沒有群組宣告,請在 [使用者屬性與宣告] 區段中,依照下列步驟執行:
- 選取 [新增群組宣告],選取 [安全性群組],確認 [來源屬性] 設定為 [群組識別碼]
- 勾選 [自訂群組宣告的名稱],接著勾選 [以角色宣告名義發出群組],然後按一下 [儲存]。
- [使用者屬性與宣告] 應如下所示:
在 Microsoft Entra ID 中建立安全性群組
讓我們建立安全性群組。
瀏覽至 [身分識別]>[群組]。
選取新增群組。
填寫 [群組類型] ([安全性])、[群組名稱] (如
AzureGroup1
) 和 [成員資格類型]。 將您在上方建立的使用者新增為成員,然後選取 [建立]:
在 SharePoint 中授與權限給安全性群組
Microsoft Entra 安全性群組可以其屬性 Id
識別,這是 GUID (如 00aa00aa-bb11-cc22-dd33-44ee44ee44ee
)。
如果沒有自訂宣告提供者,使用者必須在人員選擇器中輸入群組的確切值 (Id
),然後選取相應宣告類型。 這不方便使用者,也不可靠。
為了避免這種情況,本文使用協力廠商宣告提供者 EntraCP,在 SharePoint 中以容易的方式尋找群組:
管理來賓使用者的存取權
來賓帳戶有兩種類型:
- 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
。
更新應用程式以對所有來賓使用者使用一致的屬性
在企業應用程式
SharePoint corporate farm
的 [概觀] 中,選取 2。設定單一登入。在 [以 SAML 設定單一登入] 頁面上,選取 [使用者屬性與宣告] 窗格中的 [編輯] 圖示。
在 [使用者屬性與宣告] 區段中,依照下列步驟執行:
選取 [唯一的使用者識別碼 (名稱識別碼)],將其 [來源屬性] 屬性變更為 user.localuserprincipalname,然後按一下 [儲存]。
選取
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
,將其 [來源屬性] 屬性變更為 user.localuserprincipalname,然後按一下 [儲存]。[使用者屬性與宣告] 應如下所示:
在 SharePoint 中邀請來賓使用者
注意
本節假設使用宣告提供者 EntraCP
在上一節中,您已將企業應用程式更新為對所有來賓帳戶使用一致的屬性。
現在必須更新 EntraCP 的設定以反映該變更,並為來賓帳戶使用屬性 userprincipalname
:
- 開啟 [SharePoint 管理中心] 網站。
- 在 [安全性] 中,選取 [EntraCP 全域設定]。
- 在 [使用者識別碼屬性] 區段中:將 [「來賓」使用者的使用者識別碼:] 設定為 UserPrincipalName。
- 按一下 [確定]。
您現在可在 SharePoint 網站中邀請任何來賓使用者。
為多個 Web 應用程式設定同盟
此組態適用於單一 Web 應用程式,但是如果您想要對多個 Web 應用程式使用相同受信任的識別提供者,則需要額外的組態。 舉例來說,假設您有另一個 Web 應用程式 https://otherwebapp.contoso.local/
,您現在想要在其上啟用 Microsoft Entra 驗證。 若要啟用,請設定 SharePoint 以傳遞 SAML WReply 參數,並在企業應用程式中新增 URL。
設定 SharePoint 以傳遞 SAML WReply 參數
- 在 SharePoint 伺服器上,開啟 SharePoint 201x 管理命令介面,然後執行下列命令。 使用您先前使用的相同受信任身分識別權杖簽發者名稱。
$t = Get-SPTrustedIdentityTokenIssuer "MicrosoftEntraTrust"
$t.UseWReplyParameter = $true
$t.Update()
在企業應用程式中新增 URL
以至少 雲端應用程式系統管理員 的身分登入 Microsoft Entra 系統管理中心。
瀏覽至 [身分識別]>[應用程式]>[企業應用程式]> 選取先前建立的企業應用程式,並且選取 [單一登入]。
在 [以 SAM 設定單一登入] 頁面上,編輯 [基本 SAML 組態]。
在 [回覆 URL (判斷提示取用者服務 URL)] 區段中,新增須使用 Microsoft Entra ID 登入使用者的其他全部 Web 應用程式 URL (如
https://otherwebapp.contoso.local/
),並且按一下 [儲存]。
設定安全性權杖的存留期
根據預設,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