Несколько ресурсов в одном запросе авторизации - PullRequest
0 голосов
/ 13 октября 2018

В настоящее время мы используем следующий URL авторизации: https://login.microsoftonline.com/common/oauth2/authorize?resource=https%3A%2F%2Foutlook.office365.com

Мы также хотим использовать Graph API, поэтому я добавил следующее: https://login.microsoftonline.com/common/oauth2/authorize?resource=https%3A%2F%2Foutlook.office365.com%2F%26https%3A%2F%2Fgraph.microsoft.com

Я пробовал разные разделителимежду двумя ресурсами, но не мог заставить его работать.Каждый ресурс работает отдельно.Я надеюсь, что одновременно поддерживается более 1 ресурса?

1 Ответ

0 голосов
/ 13 октября 2018

Я думаю, что то, что вы пытаетесь сделать, передав несколько значений в параметр resource напрямую, не сработает (возможно, это не поддерживаемый сценарий, но я подожду, пока кто-нибудь из Microsoft подтвердит или я не найду документацию Azure AD, в которой говоритсяименно это. Между тем, вот старое сообщение в блоге , в котором говорится что-то вроде этого, но это блог, рассказывающий о SSO и старом с 2014 года :), так что не стоит полагаться исключительно на это.)

Ниже я объясняю, как можно заставить этот сценарий работать, повторно используя токены обновления и не передавая оба идентификатора ресурса в одном вызове.( ПРИМЕЧАНИЕ : этот подход будет работать для потока предоставления кода авторизации, но не для потока неявного предоставления, такого как SPA на основе JavaScript, поскольку в этом случае не возвращается токен обновления)

  • Один разкод авторизации доступен из конечной точки авторизации, вы переходите к конечной точке токена Azure AD, запрашивая токен для одного ресурса (используя вызов REST к конечной точке или что-то вроде метода AcquireToken библиотеки ADAL в зависимости от требований вашего приложения)
  • Вы получаете ответ токен доступа + токен обновления в ответ на ваш вызов к конечной точке токена.Токен доступа действителен для ресурса, который был упомянут в первом вызове (скажем, graph.microsoft.com)
  • Затем, используя токен обновления , который вы только что получили, вы делаете другой вызов конечной точке токена (REST)или ADAL AcquireTokenSilent, чтобы во второй раз не отображалось всплывающее окно для запроса учетных данных пользователя), и получите токен для второго ресурса, указав идентификатор второго ресурса в случае этого вызова
  • Доступ токен , полученный на этот раз, действителен для второго ресурса.
  • Фактически вы можете продолжать делать это, и поэтому в некоторых местах появляется имя токенов многоресурсного обновления.Хотя теперь все токены обновления должны быть мультиресурсными или действительными, чтобы их можно было использовать для запроса любого ресурса, на который у вашего приложения есть согласие.

Ссылки, которые могут помочь вам лучше понять и реализовать

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