我对sharepoint应用程序开发相对陌生。
正在尝试使用app+用户策略创建本地、高信任提供商托管的应用程序。我已经按照下面的文档创建了一个演示。
https://msdn.microsoft.com/library/office/fp179901(v=办公室.15)http://blogs.msdn.com/b/russmax/archive/2014/06/23/part-1-intro-to-provider-hosted-apps-setup-the-infrastructure.aspx
我面临的问题很少,如果有人能帮忙的话,我有一些问题需要澄清。
1) 当我在开发工具中检查我的请求时,它会给我以下表单数据。
SPAppToken:
SPSiteUrl:
SPSiteTitle:主页
SPSiteLogoUrl:
SPSiteLanguage:en-US
SPSiteCulture:en-US
SPRedirectMessage:EndpointAuthorityMatches
SPErrorCorrelationId:f069e89c-a0cd-20ce-a1c0-7db95db0334b
现在,当我检查具有上述相关id的日志时,我发现以下错误。
--获取应用i的令牌时出错:0i.t|ms.sp.ext|ab8ff461-bc75-4516-b475-b666ac47eec0@802f23e1-6e11-45d1-909c-07a7b0ab0ce2,异常:Microsoft.SharePoint.SPE异常:Azure访问控制服务不可用
--从appredirect.aspx请求站点92bfe5c4-7255-4b09-a89a-07e0e2b03622的应用令牌,但中存在错误生成它。当我们不需要令牌时,或者当应用程序主体设置不正确。--正在获取异常Microsoft.SharePoint.SPException:Azure访问控制服务为不可用
a) 我相信在高度信任的应用程序中,它不应该寻找Azure ACS。这个错误是因为某些不正确的配置吗?b) 此处SPAppToken为空。在高度信任应用程序的情况下,它总是空的吗?
2) 假设我已与用户A登录到sharepoint,并试图启动sharepoint应用程序。在应用程序代码中,我想获得登录用户的身份(即A)。从下面的代码中,我发现Request.LogoUserIdentity给了我用户A的身份。但我们如何才能确保该请求仅来自sharepoint。我可以复制相同的应用程序URL并粘贴到浏览器窗口中,然后使用窗口凭据登录,得到相同的结果。所以问题是,我如何验证它的合法请求是否只来自sharepoint,并且没有人伪造请求。ALos,当我在开发工具中检查请求时,它会在请求头中传递Authorization密钥。这有什么用?
using (var clientContext = TokenHelper.GetS2SClientContextWithWindowsIdentity(hostWeb, Request.LogonUserIdentity)) { clientContext.Load(clientContext.Web, web => web.Title); clientContext.ExecuteQuery(); Response.Write(clientContext.Web.Title); }
3) 此外,如果我的应用程序不支持windows身份验证,只支持FBA,会发生什么?在这种情况下,有什么方法可以获得用户身份吗?
任何帮助都将不胜感激。
感谢
对于问题#1:在我看来,本节中的步骤#9(配置身份验证设置)(来自您引用的第一篇MSDN文章)被遗漏了,即选择了"ACS控制服务"而不是"使用证书"选项。
对于问题#2:TokenHelper.cs中有一些助手方法来验证HttpRequest中的AccessToken,该方法标识请求的有效性。