如何在网上获取仅ACS应用程序访问令牌



我正在尝试获取一个apponly访问令牌,以便在我的请求的授权载体标题中使用我的REST在线端点(SharePoint)。以下是我用来检索访问令牌的代码的片段。

    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创建支持票后,我们最终决定远离使用应用程序权限来获得控制台应用程序授权。

我们的解决方法是使用服务帐户创建SharePointonLinlineCredentials对象,然后从凭证对象中获取auth cookie与我们的WebRequest通过。该解决方案来自此处找到的脚本:https://github.com/officedev/project-rest-basic-ererations

最新更新