Добавление новых разрешений привело к: Доступ запрещен.Проверьте учетные данные и попробуйте снова - PullRequest
0 голосов
/ 10 сентября 2018

Я создал приложение, в котором пользователь входит в свою учетную запись Office 365, и я выполняю действия, используя Microsoft Graph API. Когда я впервые запустил приложение, я запросил небольшие разрешения, такие как разрешение на профиль и почту. Однако теперь я хочу получить доступ к календарю пользователя и, таким образом, добавил больше разрешений (Calendars.Read, Calendars.ReadWrite).

Теперь, когда я пытаюсь получить события календаря пользователя, я получаю следующую ошибку:

{code: ErrorAccessDenied, сообщение: доступ запрещен. Проверьте учетные данные и попробуйте еще раз., innerError: {request-id: 33074527-630e-41cf-bd00-4fcd5f0ac816, дата: 2018-09-10T03: 15: 07}}

Я заметил, что, как только я добавил эти разрешения календаря, он не побуждал пользователя принять эти новые разрешения, поэтому я думаю, что поэтому у меня нет доступа. Должен ли я удалить свое приложение или что-то еще, чтобы получить эти разрешения от пользователя? Я попытался заставить пользователя снова войти в систему, добавив новые запросы разрешений в переменную scopes, но он по-прежнему не запрашивал у пользователя эти разрешения.

1 Ответ

0 голосов
/ 10 сентября 2018

Нет, вам нужно обновить записанное согласие для пользователя. Полагаю, вы используете конечные точки Azure v1 OAUth2 , поскольку эта проблема возникает чаще, чем конечные точки v2:).

Проблема в том, что когда ваш пользователь впервые дал согласие, Azure записал его согласие, чтобы его больше не запрашивали. Эта запись захватила разрешения, которые вы изначально настроили при регистрации вашего приложения. Azure v1 недостаточно интеллектуален, чтобы обнаружить, что вы добавили новые разрешения в регистрацию своего приложения с момента регистрации согласия пользователя, поэтому он с радостью продолжает выдавать токены со старыми разрешениями, пропуская приглашение пользователя.

Чтобы отобразить запрос, вам нужно включить параметр запроса prompt=consent в URL авторизации, как описано здесь .

Если вы используете конечные точки OAuth2 v2 , это становится немного проще. С конечными точками v2 все, что вам нужно сделать, это включить новые области разрешений в параметр запроса scope для вашего URL авторизации. Azure обнаружит, что пользователь не дал на это свое согласие, и выдаст запрос.

Так как вы скажете, какую конечную точку вы используете?

  • Вы зарегистрировали приложение на https://portal.azure.com? Вы используете v1.
  • Вы используете библиотеки ADAL в своем коде? Это v1.
  • Вы используете библиотеки MSAL? Это v2.

  • Посылает ли ваш код пользователю URL-адрес с v2.0? Вы догадались, это v2. Если в нем нет v2.0, значит v1.

...