共用方式為


新式驗證的增強型人員選擇器

適用於:no-img-13 2013no-img-16 2016no-img-19 2019yes-img-seSubscription Edition no-img-sopSharePoint in Microsoft 365

使用新式 (「受信任的識別提供者」) 驗證,例如安全性判斷提示標記語言 (SAML) 1.1 或 OpenID Connect (OIDC) 1.0 時,人員選擇器控件無法搜尋、解析及驗證使用者和群組。 相反地,預設行為是解析任何輸入的值,即使它不是有效的宣告也一樣。 在舊版 SharePoint Server 中,唯一的解決方案是使用自定義宣告提供者。

在 SharePoint Server 訂閱版本 (SPSE) 中,人員選擇器已增強,可根據使用者設定檔應用程式中的配置檔 (UPA 來解析使用者和群組,也稱為 UPSA) 。 UPA 必須設定為從信任的識別提供者成員資格存放區同步處理使用者和群組。 這可讓人員選擇器解析有效的使用者和群組,而不需要自定義宣告提供者。

注意事項

在 SharePoint Server 訂閱版本中使用自定義宣告提供者仍是聯繫人選擇器問題的有效解決方案。 如果本文中所討論的UPA支援宣告提供者的限制對您的組織而言太有限,請參閱 在SharePoint中建立宣告提供者

重要事項

SharePoint Server 隨附的預設使用者配置檔匯入引擎,稱為「Active Directory 匯入」 (AD 匯入) ,只能用來從內部部署 Active Directory 網域和樹系匯入使用者配置檔。 它無法設定為從 Microsoft Entra ID 匯入使用者配置檔。 如果您使用 Entra ID 支援的 OIDC 驗證,您可以考慮使用自訂宣告提供者來提供人員選擇器功能。

以下是讓UPA支援的人員選擇器運作的設定步驟。

步驟 1:將 UPA-Backed 宣告提供者新增至 SPTrustedIdentityTokenIssuer

注意事項

針對 SAML 1.1 受信任的身分識別令牌簽發者,您可以在建立令牌簽發者時新增 UPA 支援的宣告提供者,或稍後再指派一個。
針對 OIDC 1.0 受信任的身分識別令牌簽發者,必須先建立令牌簽發者,然後您才能指派宣告提供者。 請參閱 將 UPA 支援的宣告提供者新增至現有的 SPTrustedIdentityTokenIssuer

建立新的SPTrustedIdentityTokenIssuer,並同時指派UPA支援的宣告提供者

注意事項

這僅適用於 SAML 1.1 受信任的身分識別令牌簽發者。

使用 New-SPTrustedIdentityTokenIssuer PowerShell Cmdlet 建立新的令牌簽發者,並藉由新增 UseUPABackedClaimProvider 參數來指派宣告提供者。

New-SPTrustedIdentityTokenIssuer
    -ClaimsMappings <SPClaimMappingPipeBind[]> 
    -Description <String> 
    -IdentifierClaim <String> 
    -Name <String>
    -Realm <String> 
    -SignInUrl <String> 
    [-AssignmentCollection <SPAssignmentCollection>]
    -ImportTrustCertificate <X509Certificate2>
    [-UseWReply]
    [-Confirm] [-RegisteredIssuerName <String>]
    [-SignOutUrl <String>] 
    [-WhatIf] [<CommonParameters>]
    [-UseUPABackedClaimProvider]

下列三個參數需要特別注意:

  • ClaimsMappings
    ClaimsMappings 指定從原始令牌到 SharePoint 令牌的宣告對應。 藉由使用此參數,SharePoint 瞭解如何在從使用者配置檔服務應用程式屬性提供特定令牌時產生 SharePoint 令牌。
    它接受由 New-SPClaimTypeMapping Cmdlet 所建立的物件清單ClaimTypeMapping。 以下是不同類型令牌的物件範例 ClaimTypeMapping ,這些物件可以提供給 ClaimsMappings 參數:
$emailClaimMap = New-SPClaimTypeMapping -IncomingClaimType "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" -IncomingClaimTypeDisplayName "EmailAddress" -SameAsIncoming
$upnClaimMap = New-SPClaimTypeMapping -IncomingClaimType "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" -IncomingClaimTypeDisplayName "UPN" -SameAsIncoming
$roleClaimMap = New-SPClaimTypeMapping -IncomingClaimType "http://schemas.microsoft.com/ws/2008/06/identity/claims/role" -IncomingClaimTypeDisplayName "Role" -SameAsIncoming
$sidClaimMap = New-SPClaimTypeMapping -IncomingClaimType "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid" -IncomingClaimTypeDisplayName "SID" -SameAsIncoming
  • IdentifierClaim
    參數 IdentifierClaim 會指定要使用哪一種宣告類型作為標識符宣告 (通常是電子郵件或 UPN) 。 它可以設定為InputClaimTypeClaimTypeMappingNew-SPClaimTypeMapping Cmdlet 建立之 物件的 。
-IdentifierClaim $emailClaimMap.InputClaimType
  • UseUPABackedClaimProvider
    此參數可讓人員選擇器從使用者配置檔應用程式服務搜尋及選取使用者和群組。 它也會建立 , SPClaimProvider其名稱與 SPTrustedIdentityTokenIssuer相同。

注意事項

“UseUPABackedClaimProvider” 參數無法用來建立 OIDC SPTrustedIdentityTokenIssuer。 它只能用來建立 SAML SPTrustedIdentityTokenIssuer。

範例:

# Create a new trusted identity token issuer, and assign a UPA-backed claim provider at the same time
New-SPTrustedIdentityTokenIssuer -Name "UPATest" -Description "Contoso.local" -ClaimsMappings $emailClaimMap -IdentifierClaim $emailClaimMap.InputClaimType -UseUPABackedClaimProvider

將UPA支援的宣告提供者新增至現有的SPTrustedIdentityTokenIssuer

上述範例示範如何在建立受信任身分識別令牌簽發者時指派 UPA 支援的宣告提供者, (僅供 SAML 提供者) 。 如果您現有的受信任身分識別令牌簽發者 (SAML 或 OIDC) ,而且想要將 UPA 支援的宣告提供者新增至其中,請使用下列範例。

注意事項

下列 PowerShell 腳本範例在 SAML 1.1 和 OIDC 1.0 驗證提供者之間稍有不同。 請選擇正確的範例。

SAML 的範例

# Get the existing trusted identity token issuer named "SAML"
$stsidp = Get-SPTrustedIdentityTokenIssuer "SAML"

# Create the new UPA-backed claim provider 
$claimprovider = New-SPClaimProvider -AssemblyName "Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, publicKeyToken=71e9bce111e9429c"  -Description "UPA-Backed" -DisplayName "UPA-Backed Claim Provider" -Type "Microsoft.SharePoint.Administration.Claims.SPTrustedBackedByUPAClaimProvider" -TrustedTokenIssuer $stsidp

# Set the trusted identity token issuer to use the new claim provider
Set-SPTrustedIdentityTokenIssuer $stsidp -ClaimProvider $claimprovider

OIDC 的範例

# Get the existing trusted identity token issuer named "OIDC"
$stsidp = Get-SPTrustedIdentityTokenIssuer "OIDC"

# Create the new UPA-backed claim provider 
$claimprovider = New-SPClaimProvider -AssemblyName "Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, publicKeyToken=71e9bce111e9429c"  -Description "UPA-Backed" -DisplayName "UPA-Backed Claim Provider" -Type "Microsoft.SharePoint.Administration.Claims.SPTrustedBackedByUPAClaimProvider" -TrustedTokenIssuer $stsidp

# Set the trusted identity token issuer to use the new claim provider
Set-SPTrustedIdentityTokenIssuer $stsidp -ClaimProvider $claimprovider -IsOpenIDConnect

步驟 2:將設定檔同步至 UPSA

您現在可以從組織中使用的識別提供者,開始將使用者配置檔同步處理至 SharePoint 使用者設定檔服務應用程式 (UPSA) ,讓新建立的宣告提供者可以在正確的數據集上運作。

以下是將使用者設定檔同步至 SharePoint 使用者設定檔服務應用程式的兩種方式:

  • 在同步處理連線設定中,使用 SharePoint Active Directory 匯入 (AD 匯入) 搭配 受信任的宣告提供者驗證 作為 驗證提供者類型 。 若要使用 AD 匯入,請 參閱在 SharePoint Server 中管理使用者配置檔同步處理

    新增同步處理連線。

    重要事項

    AD 匯入只能用來從內部部署 Active Directory 網域和樹系匯入使用者配置檔。 它無法設定為從 Entra ID 匯入設定檔。 如果您使用以 Entra ID 支援的 OIDC 驗證,您可以改為考慮使用自定義宣告提供者來提供人員選擇器功能。

  • 使用 Microsoft Identity Manager (MIM) 。 若要使用 MIM, 請參閱 Microsoft SharePoint Server 2016 和 2019 中的 Identity Manager。

  • 設定 MIM 之後,MIM 同步處理管理員 UX 內應該會有兩個代理程式。 一個代理程式用來將使用者配置檔從來源IDP匯入至MIM資料庫。 另一個代理程式可用來將使用者配置檔從 MIM 資料庫匯出至 SharePoint 使用者設定檔服務應用程式。

在同步處理期間,請提供下列屬性給 User Profile Service 應用程式:

a. SPS-ClaimID

  • 選擇來源中的唯一身分識別屬性,該屬性會對應至使用者配置檔服務應用程式中的 SPS-ClaimID 屬性, (慣用 的電子郵件用戶主體名稱) 。
  • 使用 New-SPTrustedIdentityTokenIssuer Cmdlet 建立受信任的身分識別令牌簽發者時,這應該是對應 IdentifierClaim 參數的值。

針對 AD 匯入同步處理,管理中心 - 應用程式管理 ->> 管理服務應用程式 -> 使用者設定檔服務應用程式 -> 管理使用者屬性 UX 可讓系統管理員編輯 SPS-ClaimID 屬性,以指出來源識別提供者中的哪些屬性應該同步至 SPS-ClaimID。 這應該是用來作為受信任身分識別令牌簽發者中標識碼宣告的屬性。 例如,如果標識碼宣告是電子郵件,而且使用者的電子郵件地址儲存在Active Directory 的 「mail」 屬性中,請在此 UX 中將宣告 使用者識別碼 設定為 「mail 」。

注意事項

SPS-ClaimID 的顯示名稱是 UX 中的宣告使用者識別碼,系統管理員可以自定義顯示名稱。

如果您不確定您的識別碼宣告,您可以執行此 PowerShell 來檢查: $trust = Get-SPTrustedIdentityTokenIssuer$trust.IdentityClaimTypeInformation

宣告使用者標識碼。

屬性設定。

同步處理的屬性對應。

針對 MIM 同步處理,請將識別碼宣告 (通常是 電子郵件使用者主體名稱) 對應至 MIM 資料庫中的 SPS-ClaimID 至 SharePoint 使用者設定檔服務應用程式代理程式:

  • 在 MIM 同步處理服務管理員中,選取代理程式,然後開啟 [設定 屬性流程 UX]。 您可以將 郵件 對應至 SPS-ClaimID

    建置屬性流程。

b. SPS-ClaimProviderID 和 SPS-ClaimProviderType

注意事項

針對 AD 匯入同步處理,您只需要更新 SPS-ClaimID) 屬性對應 (「宣告使用者識別碼」。 不同於 MIM 同步處理,您不需要將「宣告提供者標識符」對應 (SPS-ClaimProviderID) 和「宣告提供者類型」 (SPS-ClaimProviderType) 。

針對 MIM 同步處理,請在設定 MIM 資料庫 的屬性流程 UX 中,將這兩個屬性設定為 SharePoint 使用者設定檔服務應用程式代理程式:

  • [SPS-ClaimProviderType] 設定為 [信任 為常數類型]。

  • 使用 New-SPTrustedIdentityTokenIssuer Cmdlet,將 SPS-ClaimProviderID 設定為提供者名稱。

    設定屬性流程。

步驟 3:讓群組可搜尋

重要事項

只有在使用群組安全標識碼 (SID) ,並將群組匯入 User Profile Service Application 時,才可以使用 UPA 支援的宣告提供者來解析安全組。
如果您使用以 Entra ID 支援的 OIDC 驗證,請注意,僅限雲端的群組沒有 SID,AD 匯入也無法與 Entra ID 同步。
如果您需要在 SharePoint 網站許可權內使用僅限雲端的使用者或群組,自定義宣告提供者可能是唯一的解決方案。

若要讓人員選擇器控制件能夠與安全組搭配使用,請完成下列步驟:

  1. 請確定 Group 對象在識別提供者中具有名為 SID 的類型 為 groupsid 的屬性。
    如果您還沒有 “groupSID” 的宣告對應,您可以使用 New-SPClaimTypeMapping 建立ClaimTypeMapping物件,然後使用 參數將此物件提供給 New-SPTrustedIdentityTokenIssuer Cmdlet-ClaimsMappings

範例:

# Add Group SID as a claim type to an existing trusted provider named "SAML"
$Trust = Get-SPTrustedIdentityTokenIssuer -Identity "SAML"
$Trust.ClaimTypes.Add("http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid")
$Trust.Update()

# Add a claim mapping for Group SID
$GroupSidClaimMap = New-SPClaimTypeMapping -IncomingClaimType "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid" -IncomingClaimTypeDisplayName "Group SID" -SameAsIncoming
$Trust = Get-SPTrustedIdentityTokenIssuer "SAML"
Add-SPClaimTypeMapping –TrustedIdentityTokenIssuer $Trust -Identity $GroupSidClaimMaps
  1. 將群組的 SID 屬性從識別提供者同步至 User Profile Service Application 中的 SID 屬性。

    • 針對 AD 匯入同步處理,SID 屬性會自動從來源識別提供者同步至 SharePoint 使用者設定檔服務應用程式。

    • 針對 MIM 同步處理,請將屬性從識別提供者對應至 MIM,然後從 MIM 對應至 SharePoint 使用者設定檔服務應用程式,讓 MIM 可以將群組 SID 從識別提供者同步至 SharePoint 使用者設定檔服務應用程式。 這些步驟類似於 SPS-ClaimID 屬性對應使用者配置檔的方式,只有在此情況下,才會更新 「group」 物件類型的對應。

      注意事項

      針對 MIM 同步處理,也請將 SAMAccountName 對應至從 MIM 到 SharePoint 使用者設定檔服務應用程式之 Group 物件的 accountName

步驟 4:在 UPSA 中將屬性設定為可搜尋

若要讓人員選擇器能夠運作,最後一個步驟是啟用哪些屬性可在User Profile Service Application 中搜尋。

系統管理員可以依照此範例 PowerShell 腳本,設定人員選擇器所搜尋的屬性。

# Get the UPA property list
$site = $(Get-SPWebApplication $WebApplicationName).Sites[0]
$context = Get-SPServiceContext $site
$psm = [Microsoft.Office.Server.UserProfiles.ProfileSubTypeManager]::Get($context)
$ps = $psm.GetProfileSubtype([Microsoft.Office.Server.UserProfiles.ProfileSubtypeManager]::GetDefaultProfileName([Microsoft.Office.Server.UserProfiles.ProfileType]::User))
$properties = $ps.Properties

# Set the proerties defined in $PropertyNames as searchable. 
# In this example, we set First Name, Last Name, claim ID, email address, and PreferredName as searchable for the People Picker.
$PropertyNames = 'FirstName', 'LastName', 'SPS-ClaimID', 'WorkEmail', 'PreferredName'
foreach ($p in $PropertyNames) {
    $property = $properties.GetPropertyByName($p)
    if ($property) {
        $property.CoreProperty.IsPeoplePickerSearchable = $true
        $property.CoreProperty.Commit()
        $property.Commit()
    }
}

若要檢查哪些 UPSA 屬性已啟用人員選擇器搜尋,您可以使用下列 PowerShell 範例:

# Get the UPA property list
$site = $(Get-SPWebApplication $WebApplicationName).Sites[0]
$context = Get-SPServiceContext $site
$psm = [Microsoft.Office.Server.UserProfiles.ProfileSubTypeManager]::Get($context)
$ps = $psm.GetProfileSubtype([Microsoft.Office.Server.UserProfiles.ProfileSubtypeManager]::GetDefaultProfileName([Microsoft.Office.Server.UserProfiles.ProfileType]::User))
$properties = $ps.Properties

# Set the proerties defined in $PropertyNames as searchable. 
# In this example, we set First Name, Last Name, claim ID, email address, and PreferredName as searchable for the People Picker.
$PropertyNames = 'FirstName', 'LastName', 'SPS-ClaimID', 'WorkEmail', 'PreferredName'
foreach ($p in $PropertyNames) {
    $property = $properties.GetPropertyByName($p)
    if ($property) {
        $property.CoreProperty.IsPeoplePickerSearchable = $true
        $property.CoreProperty.Commit()
        $property.Commit()
    }
}