无法获取SharePoint访问令牌

时间:2014-09-16 06:33:20

标签: c# asp.net sharepoint oauth sharepoint-2013

我使用 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)

任何帮助将不胜感激,谢谢: - )

1 个答案:

答案 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);