我使用 AppRegNew.aspx 在SharePoint 2013中创建了一个应用程序,我从中获得了应用程序的秘密和ID。对于这个应用程序,我使用 AppInv.aspx 设置读取和写入文档列表的权限。
现在,我想使用来自其他项目的app secrete和Id来访问文档列表。我正在使用TokenHelper类,如下所示:
TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, siteUri.Authority, realm).AccessToken
但我得到一个例外:
远程服务器返回错误:(404)Not Found。 - 请求的命名空间不存在。
我调试了TokeHelper类中的代码,发现异常来自此Web调用:
https://accounts.accesscontrol.windows.net/metadata/json/1?realm=my_realm_value
位于方法:
private static JsonMetadataDocument GetMetadataDocument(string realm)
任何帮助将不胜感激,谢谢: - )
答案 0 :(得分:0)
最后我设法搞清楚了。我使用了具有以下权限的SharePoint应用程序:
<AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web/list" Right="Write">
<Property Name="BaseTemplateId" Value="101"/>
</AppPermissionRequest>
</AppPermissionRequests>
除此之外,我还使用了证书来获取访问令牌。我与应用程序链接的证书,并使用PowerShell脚本将其设置为信任令牌颁发者:
$issuerID = [System.Guid]::NewGuid().ToString().ToLower()
$publicCertPath = "your_cer_file.cer"
$certificate = Get-PfxCertificate $publicCertPath
$web = Get-SPWeb "http://your.sharepoint.url/"
$realm = Get-SPAuthenticationRealm -ServiceContext $web.Site
$fullAppIdentifier = $issuerId + '@' + $realm
New-SPTrustedSecurityTokenIssuer -Name "High Trust App" -Certificate $certificate - RegisteredIssuerName $fullAppIdentifier -IsTrustBroker
$issuerID
iisreset
然后我像这样使用TokenHelper类:
var siteUri = new Uri("my_site_url");
TokenHelper.GetS2SAccessTokenWithWindowsIdentity(siteUri, null);