0

У нас есть приложение на Azure, которое мы уже могли прочитать по электронной почте пользователя до сих пор после большой работы и разочарования.Office 365 API ErrorAccessDenied Access запрещается при отправке по электронной почте

Для целей тестирования я дал приложение почти полный доступ (см. Изображение) enter image description here ниже), включая, но не ограничиваясь, отправку электронной почты от имени пользователей, чтение электронной почты пользователей и т. Д. Я знаю, что нам не нужно давать применение такого доступа, если это необходимо, но это просто для того, чтобы отправить электронную почту.

Я этот локон код для целей тестирования для отправки электронной почты

curl -i https://graph.microsoft.com/v1.0/me/sendmail -H 'Content-Type: application/json' -X POST -d '{"Message":{"Subject": hi", "Body": {"ContentType": "Text", "Content": "body"},"ToRecipients":[{"EmailAddress": {"Address": "[email protected]"}}]},"SaveToSentItems": "true"}' -H 'Authorization: Bearer eyJ......TOKEN.....YlhaHbAFQ' 

и он дал мне эту ошибку

{ 
    "error": { 
    "code": "ErrorAccessDenied", 
    "message": "Access is denied. Check credentials and try again.", 
    "innerError": { 
     "request-id": "4895f98f-c5a4-4083-867b-f6c7b4634b7f", 
     "date": "2017-01-24T21:48:47" 
    } 
    } 
} 

Если приложение имеет такой полный доступ, почему приложение получить отказано ?

Токен был приобретен следующим кодом:

https://login.microsoftonline.com/f0263....0be3/oauth2/authorize?client_id=8a676..e4b6&redirect_uri=http://www.wrabc.com:8090/&response_type=code. 

Я appericiate вашей помощи.

+0

Чтобы сузить эту проблему, я предлагаю вам разобрать маркерную форму [этот сайт] (https://jwt.io/), чтобы проверить, есть ли 'Mail.Send' в претензии' scp'. –

+0

@ FeiXue-MSFT Я вижу следующее «scp»: «Mail.ReadWrite Mail.ReadWrite.Shared MailboxSettings.ReadWrite User.Read», No Mail.Send. – WowBow

+0

Я пробовал POST https://outlook.office.com/api/v1.0/me/folders/inbox/messages(для создания сообщений), и это сработало. Я вижу, что есть проблема с областью Mail.Send. Я пошел на разрешения в Azure AD, и я вижу, что все проверяются, включая «Отправить почту как пользователь». После этого я получил новый токен, и он по-прежнему не имеет mail.send scp. Не уверен, что я должен делать. – WowBow

ответ

1

Чтобы выполнить API для отправки сообщения, нам необходимо предоставить разрешение Mail.Send. Если вы измените разрешение после того, как пользователи предоставили приложение, пользователям необходимо обновить разрешение путем повторного предоставления.

Другим возможным способом повторного предоставления является добавление параметра prompt=consent при инициализации запроса авторизации. Более подробно о параметрах в запросе вы можете обратиться к here.

+0

Спасибо, брат. приглашение = согласие сделал.Мало того, пользователи смогут увидеть, какой грант они дадут (чего я не видел в прошлом). Я хочу, чтобы вы, ребята, задокументировали несколько примеров, которые выполняют большую часть функциональных возможностей. Трудно найти. Конечно, были и ошибки на нашем конце, но документация была немного сложной, чтобы вести нас через. – WowBow

1

Если вы добавили разрешение после получения согласия, можете ли вы попробовать удалить приложение для пользователя по адресу https://myapps.microsoft.com/ или зарегистрировать новое приложение? Затем войдите и дайте согласие еще раз. Это должно обновить scp для токена.

+0

Нет кнопки удаления. Только сообщите о проблеме и получите информацию. – WowBow

+0

Могу ли я вручную обновить scp? как в файле манифеста или что-то в этом роде? – WowBow

+0

Получаете ли вы параметр «Удалить» на странице https://portal.office.com/? Нажмите на свое имя в правом верхнем углу, выберите «Просмотреть учетную запись», а затем «Разрешения на доступ». Я не знаю, получится ли здесь вариант, если вы не увидите его в другом диалоговом окне, но я думаю, что это возможно. – DianeD