【问题标题】:How to get an ACS app-only access token for Project Online如何获取 Project Online 的仅限 ACS 应用程序访问令牌
【发布时间】:2017-03-01 00:26:47
【问题描述】:

我正在尝试获取 AppOnly 访问令牌,以在我对 Project Online (SharePoint) 中的 REST 端点的请求的 Authorization Bearer 标头中使用。以下是我用来检索访问令牌的代码的 sn-p。

    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 作为来自服务器的响应,即使我的请求中包含网站集管理员凭据。有没有人有任何想法?

【问题讨论】:

    标签: oauth access-token sharepoint-online acs project-online


    【解决方案1】:

    在与 Microsoft 一起创建支持票以解决这一问题后,我们最终决定不再使用应用权限来进行控制台应用程序授权。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-18
      • 1970-01-01
      • 2013-08-05
      • 2013-08-08
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 2015-11-25
      相关资源
      最近更新 更多