在 SharePoint 中规划人员选取器自定义声明提供程序
适用于:2013 2016 2019 Subscription Edition SharePoint in Microsoft 365
您可以使用 SharePoint Server 随附的声明提供程序,也可以创建自己的自定义声明提供程序来连接到其他声明源,并在安全令牌中为用户提供其他声明。 例如,如果有一个客户关系管理 (CRM) 应用程序,其中包含 Active Directory 域服务 (AD DS) 的用户存储库中没有的角色,可以创建自定义声明提供程序,连接到 CRM 数据库并将 CRM 角色数据添加到用户的原始安全令牌中。 有关声明提供程序使用方案的详细信息,请参阅声明提供程序。
SharePoint Server 中的声明提供程序用于扩充声明并提供名称解析。 在声明扩充角色方面,声明提供程序会在登录过程中使用其他声明扩充用户安全令牌。 有关声明扩充的更多信息,请参阅声明提供程序。 在名称解析角色方面,声明提供程序会在人员选取器中列出、解析及搜索用户、组和声明,并确定它们的"易记"显示。 利用声明选取功能,应用程序可在人员选取器中显示声明,例如在配置 SharePoint 网站或 SharePoint 服务的安全性时。 有关人员选取器的详细信息,请参阅 在 SharePoint 中规划人员选取器。
默认情况下,执行查询时在人员选取器中解析的信息取决于声明提供程序提供的信息。 使用自带声明提供程序时无法更改提供的信息及其显示方式。 为此,您必须创建满足您的解决方案需要的自定义声明提供程序,从而在用户为网站、列表或库等项目分配权限时查找并选择用户、组和声明。
创建自定义声明提供程序时,可以控制显示的信息以及返回哪些结果来响应来自人员选取器控件的查询。 默认情况下,应将 Web 应用程序配置为使用声明身份验证,然后在服务器上注册声明提供程序。
在阅读本文之前,应了解在 SharePoint Server 中规划用户身份验证方法和声明的角色中所述的概念。 有关基于声明的身份验证的更多信息,请参阅 SharePoint 中的基于声明的标识和 A Guide to Claims-based Identity and Access Control(基于声明的标识和访问控制指南)。
体系结构
将 Web 应用程序配置为使用基于声明的身份验证时,SharePoint Server 会自动使用两个默认声明提供程序:
SPSystemClaimProvider 类提供与安装 SharePoint Server 的服务器场相关的声明信息。
SPAllUserClaimProvider 类提供 All Users 声明。
根据为 Web 应用程序的区域选择的身份验证方法,SharePoint Server 还使用表 1 中列出的一个或多个默认声明提供程序。
表 1. 身份验证方法和默认声明提供程序
身份验证方法 | 声明提供程序 |
---|---|
Windows 身份验证 |
SPActiveDirectoryClaimProvider |
基于表单的身份验证 |
SPFormsClaimProvider |
基于安全声明标记语言 (SAML) 令牌的身份验证 |
SPTrustedClaimProvider |
可以使用 Get-SPClaimProvider Microsoft PowerShell cmdlet 查看服务器场的声明提供程序列表。
注意
当 Web 应用程序配置为使用基于 SAML 令牌的身份验证时,SPTrustedClaimProvider 类不为人员选取器 Web 控件提供搜索功能。 在人员选取器控件中输入的任何文本都将自动显示,好像已进行解析一样,而不管它是否是有效用户、组或声明。 如果 SharePoint Server 解决方案将使用基于 SAML 令牌的身份验证,则应计划创建自定义声明提供程序来实现自定义搜索和名称解析。
声明提供程序在服务器场中作为部署到该服务器场的功能进行注册。 它们的范围是服务器场级别的。 每个声明提供程序对象都使用 SPClaimProviderDefinition 类来包括有关声明提供程序的信息,例如显示名称、说明、程序集和类型。 SPClaimProviderDefinition 类的两个重要属性是 IsEnabled 和 IsUsedByDefault。 这两个属性确定是否启用注册的声明提供程序以供在服务器场中使用,以及默认情况下是否在特定区域中使用声明提供程序。 默认情况下,所有声明提供程序在部署到服务器场时都将被启用。 有关 SPClaimProviderDefinition 类的信息,请参阅 SPClaimProviderDefinition 。
有关区域和身份验证的详细信息,请参阅在 SharePoint Server 中计划用户身份验证方法。
自定义声明提供程序示例
默认情况下,在服务器场上注册自定义声明提供程序时,IsEnabled 和 IsUsedByDefault 属性都设置为 True。 根据 SharePoint Server 解决方案所需的区域数、每个区域使用的身份验证方法以及每个区域的用户,您可能希望限制在人员选取器中显示自定义声明提供程序的区域。
因为声明提供程序的作用范围是服务器场级别,并且在区域级别启用,所以必须仔细规划要在其中显示自定义声明提供程序的区域。 一般情况下,应该确保 IsUsedByDefault 属性设置为 False,然后为要在其中使用自定义声明提供程序的每个区域配置 SPIisSettings 类。 若要为所选区域配置自定义声明提供程序,可以使用 ClaimsProviders () 属性创建设置区域声明提供程序的 PowerShell 脚本,也可以创建自定义应用程序以允许为所选区域启用自定义声明提供程序。
例如,假设存在一个包含两个 Web 应用程序的方案:
第一个 Web 应用程序 PartnerWeb 具有两个区域,一个使用基于声明的 Windows 身份验证的 Intranet,一个使用基于表单的身份验证的 Extranet,该应用程序用于员工与合作伙伴之间的协作。
第二个 Web 应用程序 PublishingWeb 仅具有一个使用基于表单的身份验证的区域,它是员工、业务合作伙伴和客户合作伙伴的 Internet 发布网站。
现在,假定对于 PartnerWeb 上的 Extranet 区域,你希望员工能够与业务合作伙伴(而非客户合作伙伴)进行协作。 为此,您可编写一个自定义声明提供程序,它将根据用户标识来确定当前用户是业务合作伙伴还是客户合作伙伴。 在此示例中,fabrikam.com 的用户是业务合作伙伴,但来自 contoso.com 的用户是客户合作伙伴。 当作为业务合作伙伴的用户在 PartnerWeb Web 应用程序中进行身份验证时,名为 BusinessPartner 的角色的声明将添加到声明令牌中。 对客户合作伙伴进行身份验证后,名为 CustomerPartner 的角色的声明将添加到声明令牌中。
为确保永远不向 Extranet 协作网站添加客户合作伙伴,可以在 PartnerWeb Web 应用程序上为 Extranet 区域添加 Web 应用程序策略,如果任何用户具有针对名为 CustomerPartner 的角色的声明,该策略将明确拒绝该用户进行访问。 自定义声明提供程序还必须实现对 Web 应用程序策略的搜索和键入支持,以解析 CustomerPartner 角色声明,从而可以将其添加到 Web 应用程序策略。 最后,若要在 Extranet 区域上启用此功能,您需要为该区域配置 SPIisSettings 类来使用自定义声明提供程序。 下图演示了每个 Web 应用程序和区域的身份验证方法和声明提供程序设置。
图 1. Web 应用程序和区域的身份验证方法及声明提供程序设置示例
可以通过在您为自定义声明提供程序创建的功能接收器中配置 IsUsedByDefault 属性来设置该属性。
还可以使用 Set-SPClaimProvider PowerShell cmdlet 替代 IsEnabled 和 IsUsedByDefault 属性的设置。
重要
将 IsEnabled 属性更改为 False 会对整个服务器场禁用该声明提供程序。 如果必须解决可能由自定义声明提供程序导致的问题,这样做会很有用。 一般情况下,IsEnabled 属性应设置为 True。
在多个服务器场中使用自定义声明
声明值是声明本身、声明提供程序名称以及声明提供程序在服务器上的安装顺序的组合。 因此,如果要在多个服务器场或环境中使用某个声明,则必须在要在其中使用该声明的每个服务器场上按相同顺序安装声明提供程序。 如果您已经在某个服务器场上安装了某个自定义声明提供程序,并且希望在其他服务器场上使用同一声明,请执行下列步骤:
按照声明提供程序在第一个服务器场上注册的顺序在其他服务器场上注册声明提供程序
执行第一个服务器场的备份。 有关如何备份场的信息,请参阅 在 SharePoint Server 中备份场。
使用第一个服务器场的备份来还原其他服务器场。 有关如何还原场的信息,请参阅 在 SharePoint Server 中还原场。
自定义声明提供程序的规划注意事项
规划自定义声明提供程序以便与 SharePoint 解决方案中的人员选取器结合使用时,请考虑以下问题:
Web 应用程序具有哪些区域以及每个区域中使用哪些身份验证方法?
是否应向用户添加任何自定义声明以便启用更高级的权限或安全方案?
是否会将 SAML 身份验证与受信任的身份提供程序结合使用?
人员选取器查询结果中显示的用户和角色的值来源是什么?
SharePoint Server 内容发布团队要感谢 Steve Peschka 对本文的贡献。 请访问 Steve Peschka 的 Share-n-dipity TechNet 博客。