В нашем отделе у нас есть классический сайт ASP, который использует наши корпоративные учетные записи Google для проверки подлинности и для вставки событий в наши календари Google. Организация только что переключилась с Google на Office 365, и я пытаюсь переключить код на использование Outlook вместо этого - безуспешно.
Я могу использовать токен доступа для GET https://graph.microsoft.com/v1.0/me
и просмотреть базовый профиль, но если я пытаюсь прочитать события календаря или отправить электронное письмо, я вижу сообщение:
"error": {
"code": "NoPermissionsInAccessToken",
"message": "The token contains no permissions, or permissions can not be understood."
Я создал учетную запись Azure со своей личной учетной записью Microsoft и добавил приложение. Я добавил своих коллег и свою корпоративную учетную запись в качестве гостевых пользователей. Я установил необходимые разрешения и сделал согласие администратора:


Затем я выполнил шаги на этой странице .
Я впервые посещаю https://login.microsoftonline.com/{tenant id}/oauth2/v2.0/authorize
, включая следующие элементы запроса:
client_id={client id}
response_type=code
redirect_uri={our URL}
response_mode=query
scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
state={number}
Возвращает «код», который я отправляю на https://login.microsoftonline.com/{tenant id}/oauth2/v2.0/token
, включая:
grant_type=authorization_code
client_secret={client secret}
client_id={client id}
scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
state={same number as above}
redirect_uri={same URL as above}
code={code returned from /authorize}
Возвращает токены идентификатора, доступа и обновления. Если я декодирую токен доступа, используя https://jwt.ms/,, он, кажется, содержит соответствующую аудиторию и область действия:
"aud": "https://graph.microsoft.com"
"scp": "Calendars.ReadWrite email Mail.Send openid profile User.Read"
... хотя я замечаю, что нет записи «Роли», которую я вижув некоторых документах. Это проблема?
Затем я отправляю токен доступа на https://graph.microsoft.com/v1.0/me
со следующими заголовками:
"Authorization", "Bearer {access token}"
"Host", "graph.microsoft.com"
"Content-Type", "application/json"
"Prefer", "outlook.timezone Europe/London"
, который вернет мой адрес электронной почты и т. Д., Но если яизмените URL на что-нибудь еще, например /me/photo/$value
, /me/calendar/events
, или попробуйте отправить электронное письмо. Мне сказали, что в токене нет разрешений.
Я вижу, что есть другиеподобные вопросы, но они в основном для потока client_credentials
(я не уверен, что это имеет какое-либо значение), и ни один из ответов не помог мне решить мою проблему.
Может кто-нибудь, пожалуйста, дайте мне знать, еслиЯ, очевидно, что-то пропустил - или я иду по этому поводу неправильно, чтобы получить доступ к данным Graph на стороне клиента? С Google это выглядело так просто, но я нахожу документацию и примеры Microsoft несколько менее подробными.