2017-03-01 47 views
0

我试图获取AppOnly访问令牌以用于我对Project Online(SharePoint)中的REST端点的请求的Authorization Bearer标头中。以下是我用来检索访问令牌的代码片段。如何获取适用于Project Online的ACS应用程序访问令牌

private OAuth2AccessTokenResponse GetAccessTokenResponse() 
    { 
     var realm = TokenHelper.GetRealmFromTargetUrl([[our_site_url]]); 
     var resource = $"00000003-0000-0ff1-ce00-000000000000/[[our_site_authority]]@{realm}"; 
     var formattedClientId = $"{ClientId}@{realm}"; 

     var oauth2Request = OAuth2MessageFactory.CreateAccessTokenRequestWithClientCredentials(
      formattedClientId, 
      ClientSecret, 
      resource); 
     oauth2Request.Resource = resource; 

     try 
     { 
      var client = new OAuth2S2SClient(); 
      var stsUrl = TokenHelper.AcsMetadataParser.GetStsUrl(realm); 
      var response = client.Issue(stsUrl, oauth2Request) as OAuth2AccessTokenResponse; 

      var accessToken = response.AccessToken; 
     } 
     catch (WebException wex) 
     { 
      using (var sr = new StreamReader(wex.Response.GetResponseStream())) 
      { 
       var responseText = sr.ReadToEnd(); 
       throw new WebException(wex.Message + " - " + responseText, wex); 
      } 
     } 
    } 

即使我的请求中包含网站集管理凭证,我也会收到来自服务器的403 Forbidden响应。有没有人有任何想法?

回答

0

在与Microsoft创建支持凭单以了解此情况后,我们最终决定放弃使用应用程序权限进行控制台应用程序授权。

我们的解决方法是使用服务帐户创建SharePointOnlineCredentials对象,然后从凭证对象获取身份验证cookie以使用我们的WebRequest进行传递。此解决方案来自此处的脚本:https://github.com/OfficeDev/Project-REST-Basic-Operations

相关问题