Доступ по протоколу OAuth к EWS от имени пользователя

#oauth-2.0 #microsoft-graph-api #exchangewebservices

#oauth-2.0 #microsoft-graph-api #exchangewebservices

Вопрос:

Я успешно использовал OAuth 2.0 с EWS при использовании разрешения администратора. Теперь я пытаюсь настроить его так, чтобы отдельный пользователь мог войти в систему и предоставить доступ для себя. Итак, я запускаю браузер с этим URL:

 https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=f3f92d23-29dd-4465-828e-35300884ef61amp;redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclientamp;response_type=codeamp;scope=offline_access Calendars.ReadWrite.All Contacts.ReadWrite.All Mail.ReadWrite.All Tasks.ReadWrite User.ReadBasic.All
  

Браузер позволяет мне войти в мою тестовую учетную запись, но затем возвращается эта ошибка:

ошибка = недопустимое описание клиента =AADSTS650053 Приложение ‘my app name’ запросило область ‘Календари.ReadWrite.Все ‘что не существует в ресурсе ‘00000003-0000-0000-c000-000000000000’

В Azure при просмотре разрешений API для моего приложения у меня есть 11 разрешений Exchange, включая как разрешения приложения, так и делегированные разрешения для календарей.ReadWrite.Все, в дополнение ко всем остальным, которые я запросил.

Что здесь происходит?

Ответ №1:

Поскольку EWS является устаревшим API, в нем не реализована более ограничительная модель разрешений, которую используют Graph и Outlook REST API. Единственное разрешение, которое будет работать для делегирования доступа, — это EWS.Доступ к пользователю.Все (областьhttps://outlook.office.com/EWS.AccessAsUser.All ). Это предоставляет полный доступ ко всем папкам в почтовом ящике (и ко всем почтовым ящикам, к которым пользователю был предоставлен доступ).Похоже, что регистрация вашего приложения уже включает это разрешение, так что

 https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=f3f92d23-29dd-4465-828e-35300884ef61amp;redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclientamp;response_type=codeamp;scope=offline_access https://outlook.office.com/EWS.AccessAsUser.All
  

должно работать

Комментарии:

1. Кажется, это исправляет проблему, спасибо, вы, как обычно, очень полезны.

2. Он предоставляет invalid_scope для личных учетных записей пользователей Microsoft (@outlook.com ). Работает для учетных записей организаций (рабочих или школьных)