SharePoint 2013中高信任度应用程序的疑难解答秘诀

嗨,我是一位应用程序设计人员,我喜欢进行开发,但是,老实说 - 如果我需要追踪一个以上有关新 SharePoint 应用程序的「Token 的发行者不是受信任发行者」问题,那么我可能会对着计算机大声嘶吼。为了尝试协助您保护您的声音 (和理智),我将从此处列出的事项列表开始 (这是我在遇到此问题时所查看的清单)。当我发现引发此问题和可解决该问题之令人兴奋的新方法时,就会更新此处的文章,并在下方掷出「已更新!」的字样。

请务必记住,当我说「高信任度应用程序」时,表示您并未使用 ACS 做为 SharePoint 应用程序的信任代理人;而是您的应用程序会改为建立 OAuth Token 并利用您自己的凭证来签署它。我知道我们已在他处详细记载这整个程序,因此不打算在此再次说明此程序。我将假设您已阅读过该程序且已尝试执行该程序,而现在您已经准备好来向您的屏幕举手致敬。但是,话虽如此,我还是会在此处提供看见此错误发生的方法:

1.新增至 SPTrustedRootAuthority 清单 - 当您使用凭证来签署 OAuth Token 时,需要建立 New-SPTrustedRootAuthority。就像 SharePoint 2010 中的 New-SPTrustedIdentityTokenIssuer,您需要将 Token 签署的凭证和链结中的每个凭证新增至 SharePoint 的信任授权单位列表。您可以遵循此程序的相同步骤,如同我在下列文章中所述:
http://blogs.technet.com/b/speschka/archive/2010/02/13/root-of-certificate-chain-not-trusted-error-with-claims-authentication.aspx (可能为英文网页)。只需忽略从 ADFS 导出凭证的相关信息即可 - 我假设您已经透过某些其他工具,为您的高信任度应用程序建立凭证 - 公用根 CA (例如,GoDaddy、VeriSign 等)、自我签署凭证或网域发出的凭证。

2.客户端标识符使用全部大写的字符 - 如同我在其他文章中所述,请确定当您在应用程序的 AppManifest.xml 档案中插入客户端标识符时,不会使用大写字母,或者如果您正在建置自我装载的解决方案,不会在 Web 应用程序的 web.config 中使用大写字母。如需更多详细信息,请参阅 http://blogs.technet.com/b/speschka/archive/2012/07/28/an-important-tip-about-client-id-values-for-s2s-apps-in-sharepoint-2013.aspx (可能为英文网页)。
3.未将 Token 发行者设为信任代理人 - 我曾在下列文章中说明过此问题:http://blogs.technet.com/b/speschka/archive/2012/09/27/another-apps-for-sharepoint-tip-with-the-error-quot-the-issuer-of-the-token-is-not-a-trusted-issuer-quot.aspx (可能为英文网页)。此处的陷阱是确定当您建立 New-SPTrustedSecurityTokenIssuer 时会包含 -IsTrustBroker 旗标。

4.已更新!:web.config 中遗漏 IssuerId 密钥 - 若要在 SharePoint 2013 中使用应用程序的信任代理人功能,您的应用程序在建立要传送至 SharePoint 的 JWT Token 时必须知道信任代理人的 IssuerId 是什么。它知道此密钥的方法是透过查看 web.config 中名为 IssuerId 的应用程序属性。它可以前往您应用程序之 web.config 中与 ClientId、ClientSecret 等相同的位置。只需查看如下的内容:。

5.已更新!:使用适用于 Visual Studio 的 Office 工具 RTM Preview - 实际上在 RTM Preview 中某种程度上有一点小错误,但已在 Preview 2 中修正。将授权 Token 传送至 SharePoint 的程序代码不会在 web.config 中寻找 IssuerId 元素,而是会传送其他值。它传送的内容及原因实际上并不重要;重要的是,您使用该版本的工具来解决此问题的方式,是一律在 web.config 中针对 ClientId 密钥的 SPTrustedSecurityTokenIssuer 使用 IssuerId 值。当您取得 Preview 2 时,请立即安装它们,并将 ClientId 变更为您所建立并登录的唯一 GUID (利用如下所述的 Register-SPAppPrincipal)。您不想让 ClientId 全都一样,因为它会识别哪个应用程序已签署 OAuth Token,,并在整个 SharePoint UI 中使用。当您需要进行任何疑难解答或稽核时,若所有应用程序都使用相同值,就会发生问题。

现在,还有一个相关问题值得注意:假设您「认为」已经解决此错误,但接着在自我装载的应用程序中尝试撷取来自 SharePoint 网站的内容时收到「拒绝存取」的错误?这可能意味着:

1.适用于 SharePoint 应用程序之 AppManifest.xml 档案中的 ClientId 值,与适用于您自我装载应用程序之 web.config 中的 ClientId 值不符。我们已对 Visual Studio 工具进行改进, 应该能够减少发生此问题的情况。

现在,几乎一样重要的问题是,我如何在发生这类情况时进行追踪?喔,如果很容易的话,我就不需要大声嘶吼,也不需要向我的屏幕举手致敬了。不过,我已经找到目前可在此问题发生时使用的最佳数据源。再次提醒,当我找到新信息时,就会新增至清单中:

1.ULS 记录 - 多年来的最爱,特别是在假日聚会时,我喜欢开启 ULS 记录,就只是纯粹欣赏数据量。好啦,这只是个讽刺罢了。但是,您真正可以做的是移至管理中心、监视、设定诊断记录。展开 SharePoint Foundation 类别,然后选取下列项目:App Auth、应用程序验证、验证授权及宣告验证。针对这些项目将记录和追踪层级设定为 [详细数据] 并储存您的变更,然后继续尝试再次启动您的应用程序。撷取数个 ULS 记录检视工具之一来查看传入与处理的要求。搜集关于您应用程序验证问题的提示是个好方法。

2.Fiddler - 也是粉丝的最爱,Fiddler 对于这些情况也很有用。您最常看见的是 401 未经授权的错误 (就像每次的基本问题都是「Token 的发行者不是受信任发行者」)。如果您查看要求的最后一个框架,然后单击 [响应] 框架中的 [标头] 索引卷标,将看见 WWW-Authenticate Cookie,如下所示:Bearer realm="8a96481b-6c65-4e78-b2ef-a446adb79b59",client_id="00000003-0000-0ff1-ce00-000000000000",trusted_issuers="e9134021-0180-4b05-9e7e-0a9e5a524965@8a96481b-6c65-4e78-b2ef-a446adb79b59,00000003-0000-0ff1-ce00-000000000000@8a96481b-6c65-4e78-b2ef-a446adb79b59"。那么,您可以从中获得什么?嗯,我知道在查看此内容时,会预期我的 ClientId 值是 e9134021-0180-4b05-9e7e-0a9e5a524965,并预期我的领域是 8a96481b-6c65-4e78-b2ef-a446adb79b59。ClientId 值很容易检查 - 我可以查看适用于我的自我装载应用程序的 AppManifest.xml 档案和 web.config。虽然不太可能发生领域错误的情况,但您一律可透过执下列 PowerShell 来进行验证:
$spurl ="https://foo"
$spsite = Get-SPSite $spurl
$realm = Get-SPAuthenticationRealm -ServiceContext $spsite
$realm

不论领域为何,这样做都会将领域输出至画面。最后,有一件您可以进行验证的其他事项 - 确定您已针对所使用的 ClientId 建立 appPrincipal。再次提醒,以下是一些您可用来检查的 PowerShell (这会使用上述的 WWW-Authenticate 标头):

Get-SPAppPrincipal -NameIdentifier e9134021-0180-4b05-9e7e-0a9e5a524965@8a96481b-6c65-4e78-b2ef-a446adb79b59 -Site https://foo

如果您收到错误或没有产生任何结果,则会知道您不具有效的 SPAppPrincipal,所以需要使用 PowerShell 来建立一个。为了完整起见,以下提供一个范例:

$clientId = "一些您建立的 GUID"
$spurl ="https://foo"
$spsite = Get-SPSite $spurl
$realm = Get-SPAuthenticationRealm -ServiceContext $spsite
$fullAppIdentifier = $clientId + '@' + $realm
$appPrincipal = Register-SPAppPrincipal -NameIdentifier $fullAppIdentifier -Site $spsite.OpenWeb() -DisplayName "我的超酷应用程序"

好的,今天光是讲解对于高信任度应用程序疑难解答秘诀的列表就已经精疲力竭了 (我也一样)。当我有更多消息时 (或者如果有的话),将会更新本文。

时间: 2024-11-08 17:19:39

SharePoint 2013中高信任度应用程序的疑难解答秘诀的相关文章

SharePoint 2013 代码创建应用程序目录(App Catalog)

众所周知,SharePoint App是2013版本的一大特色,那么,关于App的分发有几种方式呢?SharePoint给我们提供了两种方式,一种是上载到SharePoint应用商店,另一种是在本地SharePoint环境中创建应用程序目录,为本地用户提供App的分发. SharePoint服务器场中可以有多个应用程序目录,每个目录针对服务器场中的一个Web 应用程序.若要为Web应用程序配置应用程序目录,只需提供要用于应用程序目录网站的网站集管理员的名称.创建应用程序目录后,网站集管理员可将

Office 365 - SharePoint 2013 Online 之应用程序开发

1.给站点添加完Napa后,在网站内容里点击Napa,如下图: 2.创建一个新的app,如下图: 3.可以在Napa里添加新的项目,如下图: 4.添加新的文件,可以添加web页面.样式表.脚本,如下图: 5.可以设置Napa,如下图: 6.设置用Visual C#语言,这样vs打开可以用C#,如下图: 7.可以点击左侧菜单,Open in Visual Studio,如下图: 8.弹出菜单,选择Visual C#,如下图: 9.可能会弹出菜单,安装Web Platform 5.0,如下图: 10

SharePoint 2013开发入门:应用程序页

在SharePoint中,有两种页面类型,一种是保存在数据库中的页面,我们可以在网站的页面库中看到:还有一种叫做应用程序页,部署在服务器上,Layouts下面的页面,是应用程序页,主要是完成特定功能的页面. 特定功能的页面,听起来比较笼统,举个例子,比如说图片上传到特定文档库,文档批量迁移,权限管理等. 1.添加新建项目,选择SharePoint 2013 空项目,如下图: 开发入门:应用程序页-sharepoint 2013"> 2.选择场解决方案,如下图: 3.添加新项,选择应用程序页

使用LightSwitch HTML客户端预览版构建SharePoint 2013应用程序

约一个星期前,我给你们展示了如何通过注册一个免费的 Office 365 http://www.aliyun.com/zixun/aggregation/7155.html">开发人员帐户来开始使用 LightSwitch HTML 客户端预览版 2构建 SharePoint 2013 应用程序,并演示了Survey(调查) App 教程.如果你错过了它: 使用 LightSwitch在几分钟内构建SharePoint 应用程序 在浏览完本教程后,你有一个 SharePoint 应用程序,

SharePoint 2013 母版页修改后,无法添加应用程序

原文:SharePoint 2013 母版页修改后,无法添加应用程序 问题描述:前一段时间尝试了一下将HTML文件转换为母版页,但是,用着用着又发现新的问题,我们转换的母版页,设置成默认母版页以后,无法添加应用程序,只有一个对话框一直加载.我们拷贝自带的母版页,修改Html同步master以后,也无法添加应用程序.如下图: (一直显示"正在加载"的界面) (正常的添加应用程序的页面) 考虑了一下问题可能出现在哪儿,因为我是自己转换的母版页,所以我就Copy了一个自带的母版页,然后使用生

SharePoint 2013 图文开发系列之应用程序页

原文:SharePoint 2013 图文开发系列之应用程序页 在SharePoint中,有两种页面类型,一种是保存在数据库中的页面,我们可以在网站的页面库中看到:还有一种叫做应用程序页,部署在服务器上,Layouts下面的页面,是应用程序页,主要是完成特定功能的页面. 特定功能的页面,听起来比较笼统,举个例子,比如说图片上传到特定文档库,文档批量迁移,权限管理等. 1.添加新建项目,选择SharePoint 2013 空项目,如下图: 2.选择场解决方案,如下图: 3.添加新项,选择应用程序页

在SharePoint 2013中使用要求管理员

我尚未看见许多关于本主题的信息,因此坦白说,我认为需要花些时间,才能取得一些适用于要求管理员 (RM) 的 PowerShell.对于不熟悉 RM 的人来说,这是 SharePoint 2013 的新功能,其设计目的是进行 SharePoint 要求的路由传送与节流处理.藉由具备连入要求本质的知识 (例如,用户代理程序.要求的 URL 或来源 IP),SharePoint 可自定义每个要求的响应.它会根据您定义的规则进行路由传送,或对要求进行完全节流处理.RM 规则会针对每个 Web 应用程序进

SharePoint 2013如何搭建app本地开发环境

使用SharePoint App,如果要通过应用程序目录分发 SharePoint 相关应用程序,如具有完全控制权限的 SharePoint 相关应用程序(无法部署到 Office 365 网站),则将需要使用本地计算机上完整安装的SharePoint 2013.我们在本文中提供了用于设置SharePoint 2013 的本地安装以及开始开发SharePoint 相关应用程序的步骤. 一.配置前准备 1. 请确定已经安装好SharePoint 2013,如若未安装,请参考附后的安装教程. 2.确

如何配置Sharepoint 2013的站点邮箱

站点邮箱是Sharepoint 2013的新功能,不知道大家是否知晓,可以在一个网站集下的项目网站上开启站点邮箱,这样根据项目的邮件都会在这里进行汇总,方便相关的管理和查阅,无论是项目老成员还是新成员都可以看到项目的前后始末~那怎么配置呢? 可以根据项目在sharepoint 2013中利用Exchange 2013配置站点邮箱 首先需要创建443的WEB应用程序以及443下的网站集. 为什么呢?因为需要证书来完成信任 Sharepoint 2013的系统最好为windows Server 20