Как получить токен доступа только для приложений ACS для Project Online
Я пытаюсь получить токен доступа AppOnly для использования в заголовке носителя авторизации моего запроса к конечной точке REST в Project Online (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 Запрещено как ответ от сервера, даже если я включаю учетные данные администратора семейства сайтов в свой запрос. У кого-нибудь есть идеи?
1 ответ
После создания заявки в службу поддержки Microsoft, чтобы выяснить это, мы в конечном итоге решили отказаться от использования разрешений приложений для авторизации консольных приложений.
Наш обходной путь состоял в том, чтобы создать объект SharePointOnlineCredentials, используя учетную запись службы, а затем получить файл cookie Auth из объекта учетных данных для передачи с нашим WebRequest. Это решение пришло из сценариев, найденных здесь: https://github.com/OfficeDev/Project-REST-Basic-Operations