Oauth 如何为Project Online获取ACS仅应用程序访问令牌

Oauth 如何为Project Online获取ACS仅应用程序访问令牌,oauth,access-token,sharepoint-online,acs,project-online,Oauth,Access Token,Sharepoint Online,Acs,Project Online,我正在尝试获取一个AppOnly访问令牌,以便在我对Project Online(SharePoint)中的REST端点的请求的授权承载头中使用。下面是我用来检索访问令牌的代码片段 private OAuth2AccessTokenResponse GetAccessTokenResponse() { var realm = TokenHelper.GetRealmFromTargetUrl([[our_site_url]]); var resou

我正在尝试获取一个AppOnly访问令牌,以便在我对Project Online(SharePoint)中的REST端点的请求的授权承载头中使用。下面是我用来检索访问令牌的代码片段

    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禁止响应。有人有什么想法吗?

在与Microsoft建立了一份支持单后,我们最终决定不再使用应用程序权限进行控制台应用程序授权

我们的解决方法是使用服务帐户创建SharePointOnlineCredentials对象,然后从credentials对象获取Auth cookie以与我们的WebRequest一起传递。此解决方案来自以下脚本: