Получить токен доступа к EWS и User.Read.All - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь получить токен доступа к областям: 'https://outlook.office.com/EWS.AccessAsUser.All', 'User.Read.All'.

  1. Если я использую следующий URL для получить код авторизации: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?scope=https%3A%2F%2Foutlook.office.com%2FEWS.AccessAsUser.All+User.Read.All&client_id=AAA...ZZZ&redirect_uri=http%3A%2F%2Flocalhost%3A9999&response_type=code ответ токена доступа:
{
'scope': 'https://outlook.office.com/EWS.AccessAsUser.All https://outlook.office.com/User.Read https://outlook.office.com/User.Read.All', 
'ext_expires_in': 3599, 
'expires_in': 3599, 
'token_type': 'Bearer', 
'access_token': '123...zzz'
}

Обратите внимание на область действия в ответе. Этот токен доступа работает в EWS-запросах без ошибок. Но запросы к MS Graph API возвращаются:

{
    "error": {
        "code": "InvalidAuthenticationToken",
        "innerError": {
            "date": "2020-02-15T19:45:50",
            "request-id": "4542b743-05e1-4555-b612-e0419c3b624b"
        },
        "message": "Access token validation failure. Invalid audience."
    }
}
Если я использую следующий URL-адрес для получения кода авторизации: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?redirect_uri=http%3A%2F%2Flocalhost%3A9999&client_id=AAA...ZZZ&scope=User.Read.All+https%3A%2F%2Foutlook.office.com%2FEWS.AccessAsUser.All&response_type=code ответ токена доступа:
{
'scope': 'EWS.AccessAsUser.All User.Read User.Read.All profile openid email', 
'ext_expires_in': 3599, 
'access_token': '0123...zzz',
'token_type': 'Bearer',
 'expires_in': 3599
}

Опять же, обратите внимание на область действия в ответе. Этот токен доступа работает в запросах MS Graph без ошибок. Но запросы EWS возвращают ошибку:

Error: Microsoft.Exchange.WebServices.Data.ServiceRequestException: The request failed. The remote server returned an error: (401) Unauthorized. ---> System.Net.WebException: The remote server returned an error: (401) Unauthorized.
   at System.Net.HttpWebRequest.GetResponse()
MSAL также не работает в этом случае.
var pcaOptions = new PublicClientApplicationOptions
{
  ClientId = _appId,
  TenantId = _tenantId
};
var pca = PublicClientApplicationBuilder.CreateWithApplicationOptions(pcaOptions).Build();
var ewsScopes = new string[] { "User.Read.All", "https://outlook.office.com/EWS.AccessAsUser.All" };
var authResult = await pca.AcquireTokenInteractive(ewsScopes).ExecuteAsync();
foreach (var s in authResult.Scopes)
{
    Console.WriteLine($"Scope: {s}");
}

Если https://outlook.office.com/EWS.AccessAsUser.All находится в списке областей действия, токен доступа работает в запросах EWS. Запрос к MS Graph возвращает ошибку:

Error: Status Code: Unauthorized
Microsoft.Graph.ServiceException: Code: InvalidAuthenticationToken
Message: Access token validation failure. Invalid audience.

1 Ответ

0 голосов
/ 17 февраля 2020

Согласно предоставленной вами информации, вы хотите запросить токен доступа для вызова Microsoft Graph и Outlook Rest API, и вы используете один запрос для запроса токена доступа для двух API. Но мы не можем этого сделать. Потому что Весь поток аутентификации, предоставленный Microsoft, не допускает использование нескольких ресурсов / областей, пока вы запрашиваете токен . Другими словами, один запрос просто может запросить токен доступа для графа Microsoft или Outlook Rest API. Для получения более подробной информации, пожалуйста, обратитесь к Доступ к нескольким ресурсам в одном запросе авторизации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...