教學課程:在 Azure Active Directory 和內部部署 SharePoint 之間執行同盟驗證

案例描述

在本教學課程中,您會設定 Azure Active Directory 之間的同盟驗證,以及內部部署 SharePoint。 目標是讓使用者能夠登入 Azure Active Directory,並使用其身分識別來存取 SharePoint 的內部部署網站。

必要條件

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

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

本文使用下列值:

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

在 Azure Active Directory 中設定企業應用程式

若要在 Azure AD 中設定同盟,您需要建立專用的 Enterprise 應用程式。 使用預先設定的範本 SharePoint on-premises (可在應用程式庫中找到)簡化了其設定。

建立企業應用程式

  1. 登入 Azure Active Directory 入口網站
  2. 移至 [企業應用程式],然後選取 [所有應用程式]。
  3. 若要新增應用程式,請選取對話方塊頂端的 [新增應用程式]。
  4. 在搜尋方塊中,輸入 SharePoint 內部部署。 從結果窗格中選取 [SharePoint 內部部署]。
  5. 指定應用程式的名稱 (在本教學課程中,它是 SharePoint corporate farm) ,然後按一下 [ 建立 ] 以新增應用程式。
  6. 在新的企業應用程式中,選取 [屬性],然後檢查 [需要使用者指派?] 的值。 針對此案例,請將其值設定為 [ ],然後按一下 [ 儲存]。

設定企業應用程式

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

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

  2. 在 [以 SAML 設定單一 Sign-On ] 頁面上,選取 [基本 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) 的憑證。 這是 Azure AD 用來簽署 SAML 權杖之簽署憑證的公開金鑰。 SharePoint 需要它來確認傳入 SAML 權杖的完整性。

    • 在 [設定 SharePoint 公司伺服器 陣列] 區段中,複製 [記事本] 中的 登入 URL ,並以 /wsfed 取代尾端的字串 /saml2

    重要

    請務必將 /saml2 取代為 /wsfed ,以確保 Azure AD 會在 SHAREPOINT 要求時發出 SAML 1.1 權杖。

    • 在 [設定 SharePoint 公司伺服器 陣列] 區段中,複製 [登出 URL ]

將 SharePoint 設定為信任 Azure Active Directory

在 SharePoint 中建立信任

在此步驟中,您會建立 SPTrustedLoginProvider 來儲存 SharePoint 需要信任 Azure AD 的設定。 針對這一點,您需要您在上面複製的 Azure AD 的資訊。 啟動 SharePoint 管理命令介面,並執行下列腳本來建立它:

# Path to the public key of the Azure AD SAML signing certificate (self-signed), downloaded from the Enterprise application in the Azure AD portal
$signingCert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("C:\AAD app\SharePoint corporate farm.cer")
# Unique realm (corresponds to the "Identifier (Entity ID)" in the Azure AD Enterprise application)
$realm = "urn:sharepoint:federation"
# Login URL copied from the Azure AD 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 Azure AD signing certificate
New-SPTrustedRootAuthority -Name "Azure AD signing certificate" -Certificate $signingCert

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

設定 SharePoint web 應用程式

在此步驟中,您會在 SharePoint 中設定 web 應用程式,以信任上面建立的 Azure AD Enterprise 應用程式。 有一點要注意的重要規則:

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

    • 如果您建立新的 web 應用程式,以在預設區域中使用 Windows 和 Azure AD 驗證:

      1. 啟動 SharePoint 管理命令 介面,然後執行下列腳本:

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

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

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

        Web 應用程式的備用存取對應

    • 如果您擴充現有的 web 應用程式,以在新的區域使用 Azure AD 驗證:

      1. 啟動 SharePoint 管理命令介面,然後執行下列腳本:

        # This script extends an existing web application to set Azure AD 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 "AzureADTrust"
        $ap = New-SPAuthenticationProvider -TrustedIdentityTokenIssuer $sptrust
        $wa = Get-SPWebApplication $webAppDefaultZoneUrl
        
        New-SPWebApplicationExtension -Name "SharePoint - Azure AD" -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. 執行下列腳本來產生自我簽署的憑證,並將它新增到電腦的「我的存放區」:

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

    1. 開啟 Internet Information Services Manager 主控台。
    2. 在樹狀檢視中展開伺服器,展開 [網站] ,選取 [ 網站 SharePoint] Azure AD,然後選取 [系結]。
    3. 選取 [ HTTPs 系結],然後選取 [ 編輯]。
    4. 在 [TLS/SSL 憑證] 欄位中,選擇要使用的憑證 (例如,在上方建立的 spsites) ,然後選取 [確定]

    注意

    如果您有多部 Web 前端伺服器,則需要在每個伺服器上重複執行此作業。

SharePoint 與 Azure AD 之間信任的基本設定現在已完成。 讓我們來看看如何以 Azure Active Directory 使用者的身份登入 SharePoint 網站。

以成員使用者的身份登入

Azure Active Directory 有兩種類型的使用者:來賓使用者和成員使用者。 讓我們從成員使用者開始,而這只是位於您組織中的使用者。

在 Azure Active Directory 中建立成員使用者

  1. 在 Azure 入口網站最左邊的窗格中,選取 [Azure Active Directory]。 在 [管理] 窗格中,選取 [使用者]。

  2. 在畫面頂端選取 [所有使用者] > [新增使用者]。

  3. 選取 [建立使用者],然後在使用者屬性中,執行下列步驟。

    1. 在 [名稱] 方塊中,輸入使用者名稱。 我們使用了 TestUser

    2. 在 [使用者名稱] 方塊中,輸入 AzureUser1@<yourcompanytenant>.onmicrosoft.com。 此範例顯示 AzureUser1@demo1984.onmicrosoft.com

      [使用者] 對話方塊

    3. 選取 [顯示密碼] 核取方塊,然後記下 [密碼] 方塊中顯示的值。

    4. 選取 [建立]。

    5. 您現在可以與 AzureUser1@demo1984.onmicrosoft.com 共用網站,並允許此使用者存取。

將許可權授與 SharePoint 中的 Azure Active Directory 使用者

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

重要

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

未 AzureCP 的人員選擇器結果

這項限制是因為 SharePoint 不會驗證人員選擇器的輸入,這可能會令人困惑,並且會導致拼錯或使用者不小心選擇錯誤的宣告類型。
為了修正此案例,稱為AzureCP的開放原始碼解決方案可以用來將 SharePoint 2019/2016/2013 與 Azure Active Directory 連線,並針對您的 Azure Active Directory 租使用者解決輸入。 如需詳細資訊,請參閱 AzureCP

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

使用 AzureCP 的人員選擇器結果

重要

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

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

授與許可權給安全性群組

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

  1. 在 Enterprise 應用程式的總覽中 SharePoint corporate farm ,選取 [ 2]。設定單一登入

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

    1. 選取 [新增群組 宣告],選取 [安全性群組],確認 [來源屬性] 設定為 [群組識別碼]。
    2. 核取 [自訂群組 宣告的名稱],然後核取 [ 發出群組作為角色宣告 ],然後按一下 [ 儲存]。
    3. & 宣告的使用者屬性 看起來應該像這樣:

    使用者和群組的宣告

在 Azure Active Directory 中建立安全性群組

讓我們在 Azure Active Directory 中建立安全性群組:

  1. 選取 [Azure Active Directory] > [群組]。

  2. 選取 [新增群組]。

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

    建立 Azure AD 安全性群組

在 SharePoint 中將許可權授與安全性群組

Azure AD 安全性群組會以其屬性識別 Id ,也就是 GUID (例如 E89EF0A3-46CC-45BF-93A4-E078FCEBFC45) 。
如果沒有自訂宣告提供者,使用者必須 Id 在人員選擇器中輸入群組的確切值 () ,然後選取對應的宣告類型。 這並不容易使用,也不可靠。
為了避免這種情況,本文使用協力廠商宣告提供者AzureCP ,在 SharePoint 中以易記的方式尋找群組:

人員選擇器搜尋 Azure AD 群組

管理來賓使用者存取權

來賓帳戶有兩種類型:

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

根據預設,Azure Active Directory 會將「唯一的使用者識別碼」和「名稱」宣告設定為屬性 user.userprincipalname
可惜的是,來賓帳戶的這個屬性是不明確的,如下表所示:

Azure AD 中設定的來源屬性 B2B 來賓 Azure AD 所使用的實際屬性 MSA 來賓 Azure AD 所使用的實際屬性 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. 在 Enterprise 應用程式的總覽中 SharePoint corporate farm ,選取 [ 2]。設定單一登入

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

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

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

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

    3. & 宣告的使用者屬性 看起來應該像這樣:

    來賓 & 宣告的使用者屬性

邀請 SharePoint 中的來賓使用者

注意

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

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

  1. 開啟 [SharePoint 管理中心] 網站。
  2. 在 [ 安全性] 底下,選取 [ AzureCP global configuration]。
  3. 在 [使用者識別碼] 區段中:設定 ' Guest ' 使用者的使用者識別碼:
  4. 按一下 [確定]

AzureCP 來賓帳戶設定

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

設定多個 web 應用程式的同盟

此組態適用於單一 Web 應用程式,但是如果您想要對多個 Web 應用程式使用相同受信任的識別提供者,則需要額外的組態。 例如,假設您有個別的 web 應用程式 https://otherwebapp.contoso.local/ ,而您現在想要在其上啟用 Azure Active Directory 驗證。 若要這樣做,請將 SharePoint 設定為傳遞 SAML WReply 參數,並在企業應用程式中新增 url。

設定 SharePoint 以傳遞 SAML WReply 參數

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

在企業應用程式中新增 Url

  1. 在 Azure 入口網站中,選取 [Azure Active Directory] > [企業應用程式]。 選取先前建立的企業應用程式名稱,然後選取 [單一登入]。

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

  3. 在 [回復 URL (判斷提示取用者服務 url]) 中,新增 URL (例如, https://otherwebapp.contoso.local/) 需要以 Azure Active Directory 登入使用者的所有其他 web 應用程式,然後按一下 [儲存]。

指定其他 web 應用程式