创建使用高信任授权的 SharePoint 加载项

高信任外接程序是提供程序托管的 SharePoint 外接程序,它安装在本地 SharePoint 场上。 它无法安装到 Microsoft SharePoint Online 或通过 Office 商店推广。 高信任加载项使用证书(而不是上下文令牌)建立信任。

注意

本主题将帮助你了解 SharePoint 加载项的高信任授权系统。有关创建和部署高信任加载项的实用信息,请参阅下列主题:

在 SharePoint 中,安全令牌服务 (STS) 提供了用于服务器间身份验证的访问令牌。 STS 允许临时访问令牌访问其他应用程序服务,如 Exchange、Lync 和 SharePoint 加载项。场管理员使用 Windows PowerShell cmdlet 和证书在 SharePoint 和其他应用程序或加载项之间建立信任。 SharePoint New-SPTrustedRootAuthority 必须使用 cmdlet 信任使用的每个证书。 此外,每个证书都必须使用 New-SPTrustedSecurityTokenIssuer cmdlet 在 SharePoint 中注册为令牌颁发者。

注意

STS 不适用于用户身份验证。 因此,你将不会发现用户登录页面、管理中心内的“身份验证提供程序”部分或 SharePoint 内的人员选取器中列出了 STS。

两种令牌颁发者

高信任 SharePoint 加载项的远程 Web 应用程序绑定到数字证书。 (有关如何完成此操作的信息,请参阅上面链接的两个主题。)远程 Web 应用程序使用该证书签发其包含在对 SharePoint 的所有请求中的访问令牌。 Web 应用程序使用证书的私钥签署令牌,SharePoint 则通过证书的公钥对其进行验证。 证书必须首先注册为受信任的令牌颁发者,SharePoint 才会信任它所颁发的令牌。

有两种类型的令牌颁发者:某些颁发者仅对特定的 SharePoint 加载项颁发令牌;其他颁发者(称为信任代理)可以为多个 SharePoint 加载项颁发令牌。

从实际来看,SharePoint 场管理员确定哪些类型的令牌颁发者由它们在 New-SPTrustedSecurityTokenIssuer cmdlet 中使用的开关和参数值创建。 要创建作为信任代理的令牌颁发者,请将 -IsTrustBroker 开关添加到命令行并对 -Name 参数使用唯一值,而非加载项的客户端 ID。 下面是一个已编辑的示例。

New-SPTrustedSecurityTokenIssuer -IsTrustBroker -RegisteredIssuerName "<full_token_issuer_name> " --other parameters omitted--

要创建非代理令牌颁发者,请勿使用 -IsTrustBroker 开关。 还存在另一个区别。 -RegisteredIssuerName 参数的值始终采用由“@”字符分隔的两个 GUID 形式;GUID@GUID。 右侧的 GUID 始终是 SharePoint 场(或网站订阅)的身份验证领域的 ID。 左侧的 GUID 始终是令牌颁发者的特定 ID。

在创建信任代理令牌颁发者时,这是一个随机的 GUID 。 但在创建非代理令牌颁发者时,特定颁发者 GUID 必须是用作 SharePoint 加载项客户端 ID 的同一个 GUID。 此参数为颁发者提供一个名称。 它还会告知 SharePoint 哪个 SharePoint 加载项是证书可以向其颁发令牌的唯一加载项。 以下是部分示例:

$fullIssuerIdentifier = "<client_ID_of_SP_app> " + "@" + "<realm_GUID> "
New-SPTrustedSecurityTokenIssuer -RegisteredIssuerName $fullIssuerIdentifier --other parameters omitted--

通常,New-SPTrustedSecurityTokenIssuer cmdlet 用于执行其他任务以便为高信任加载项配置 SharePoint 的脚本中。有关此类脚本和 New-SPTrustedSecurityTokenIssuer cmdlet 的完整示例的详细信息,请参阅 SharePoint 的高信任配置脚本

决定高信任 SharePoint 加载项使用一个证书还是多个证书

获取和管理高信任 SharePoint 加载项使用的证书时,SharePoint 和网络管理员可以在两种基本策略之间进行选择:

  • 将同一证书用于多个 SharePoint 加载项。

  • 为每个 SharePoint 外接程序使用单独的证书。

本节讨论每个策略的优点和缺点。

将同一证书用于多个 SharePoint 加载项的好处是管理员需要信任和管理的证书较少。 这种方法的劣势是,当遇到想要中断对某个特定 SharePoint 加载项的信任的情况时,管理员可中断信任的唯一方法是删除作为令牌颁发者或作为根证书颁发机构的证书。 但删除证书也会中断与使用相同证书的所有其他 SharePoint 加载项的信任,从而导致它们全部停止工作。

若要使仍然可信的 SharePoint 外接程序再次工作,管理员需要使用新证书创建对象New-SPTrustedSecurityTokenIssuer并包含 标志-IsTrustBroker。 然后必须在托管任何受信任的加载项的每台服务器上注册新证书,所有这些加载项都必须绑定到新证书。

对每个加载项使用一个证书的优势是可以更轻松地中断与特定加载项的信任,因为当管理员中断与一个加载项的证书的信任时,供仍然受信任的加载项使用的证书不会受影响。 此策略中的劣势是管理员需要获取多个证书,且 SharePoint 必须配置为使用每个证书,这可以通过一个可重用脚本实现,如 SharePoint 的高信任配置脚本中所示。

证书是 SharePoint 中的根证书颁发机构

如本文开头所述,SharePoint 场管理员必须将高信任加载项中的远程 Web 应用程序的证书设为 SharePoint 中的信任根证书颁发机构以及信任令牌颁发者。 事实上,当 Web 应用程序证书背后存在证书颁发机构的层次结构时,链中的所有证书都必须添加到 SharePoint 的受信任根证书颁发机构列表。

通过调用 New-SPTrustedRootAuthority cmdlet,链中的每个证书都会添加到 SharePoint 的受信任根颁发机构列表中。 例如,假定 Web 应用程序的证书是 LAN 上的企业域证书颁发机构颁发的域证书,并假定其证书由 LAN 上的独立顶级证书颁发机构颁发。 在此方案中,顶级 CA、中间 CA 和 Web 应用程序的证书都必须添加到 SharePoint 的信任根证书颁发机构列表中。 以下 Windows PowerShell 代码将实现此操作。

$rootCA = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("<path_to_top-level_CA's_cer_file>")
New-SPTrustedRootAuthority -Name "<name_of_certificate>" -Certificate $rootCA

$intermediateCA = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("path_to_intermediate_CA's_cer_file")
New-SPTrustedRootAuthority -Name "<name_of_certificate>" -Certificate $intermediateCA

$certificate = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("path_to_web_application's_cer_file") 
New-SPTrustedRootAuthority -Name "<name_of_certificate>" -Certificate $certificate 

根证书和中间证书在 SharePoint 场上仅添加一次。 通常,Web 应用程序的证书会添加到执行其他配置的单独脚本中,例如调用 New-SPTrustedSecurityTokenIssuer。 有关示例,请参阅 SharePoint 的高信任配置脚本

正如开发和调试加载项的情况一样,如果 Web 应用程序的证书是自签名证书,则没有证书链,且只有 Web 应用程序的证书需要添加到根证书颁发机构列表中。

有关详细信息,请参阅博客文章进行声明身份验证时根证书链不受信任错误。 滚动浏览关于从 Active Directory 联合身份验证服务 (AD FS) 导出证书的部分,假定已通过某些其他方式为高信任加载项创建证书;例如,通过使用证书颁发机构颁发的商业证书、自签名证书或域颁发的证书。

Web 应用程序需要知道它是令牌颁发者

SharePoint 加载项的远程 Web 应用程序组件已在 IIS 中绑定到其证书。 这对于证书的传统用途已足够:安全识别 Web 应用程序和编码 HTTP 请求与响应。

但是,在高信任 SharePoint 加载项中,证书具有其他任务,即作为 Web 应用程序发送到 SharePoint 的访问令牌的正式“颁发者”。 因此,Web 应用程序必须知道在 SharePoint 中将证书注册为令牌颁发者时所使用的证书的颁发者 ID。 Web 应用程序从 web.config 文件的 appSettings 部分获取此 ID,其中包含一个名为 IssuerId 的密钥。

有关加载项开发人员如何设置该值以及如何将证书绑定到 IIS 中的 Web 应用程序的说明,请参阅打包和发布高信任 SharePoint 加载项

请注意,如果客户使用的策略是对每个高信任 SharePoint 加载项使用单独的证书,ClientId 值还可用作 IssuerId 值。 当多个加载项共享同一个证书时,则不是这种情况,因为每个 SharePoint 加载项 必须具有自己的唯一客户端 ID,但颁发者 ID 是 SPTrustedSecurityTokenIssuer 对象的标识符。

下面是高信任 SharePoint 外接程序的 appSettings 部分的一个示例。 在此示例中,证书由多个外接程序共享,因此 IssuerIdClientId 不同。 请注意,高信任 SharePoint 外接程序中没有 ClientSecret 密钥。

<appSettings>
  <add key="ClientId" value="6569a7e8-3670-4669-91ae-ec6819ab461" />
  <add key="ClientSigningCertificatePath" value="C:\MyCerts\HighTrustCert.pfx" />
  <add key="ClientSigningCertificatePassword" value="3VeryComplexPa$$word82" />
  <add key="IssuerId" value="e9134021-0180-4b05-9e7e-0a9e5a524965" />
</appSettings>

注意

前面的示例假定证书存储在文件系统上。 这对于开发和调试是可接受的。 在高信任的生产 SharePoint 加载项中,证书通常存储在 Windows 证书存储中,并且 ClientSigningCertificatePathClientSigningCertificatePassword 键通常会替换为 ClientSigningCertificateSerialNumber 键。

高信任系统中的 IT 员工职责

如上所述,开发人员必须了解应用程序的安全要求,而 IT 专业人员要实现为其提供支持所需的基础架构。 IT 专业人员必须规划以下操作要求:

  • 创建或购买一个或多个用于可信 SharePoint 加载项的证书。

  • 确保证书安全存储在 Web 应用程序服务器上。 使用 Windows 操作系统时,这意味着将证书存储在 Windows 证书存储中。

  • 管理这些证书向构建 SharePoint 加载项的开发人员的分发情况。

  • 为使用该证书的加载项和收到证书副本的开发人员跟踪每个证书的分发位置。 如果必须撤销某个证书,IT 员工必须与每个开发人员合作,以安排到新证书的管理过渡。

另请参阅