Microsoft Authentication Request дополнительная область с токеном доступа - PullRequest
0 голосов
/ 30 января 2020

Аутентификация Microsoft очень сложна в моих глазах. Есть так много потоков и всего, что происходит!

Итак, что я сейчас делаю:

  1. Получите токен для определенной области видимости c, используя поток кода авторизации. Я использую следующую область: https://admin.services.crm.dynamics.com//user_impersonation (насколько я знаю, я могу запросить токен только для одной области / аудитории)
  2. Токен работает нормально. Я могу получить доступ к администратору динамического центра с помощью полученного токена на предъявителя.

Теперь я пытаюсь сделать следующее:

  • Я пытаюсь получить доступ конечная точка Microsoft Graph для чтения информации о пользователях AAD.
  • Я не могу использовать существующий токен сверху, так как этот имеет только область действия user_importation для https://admin.services.crm.dynamics.com/
  • . запросите другой токен с областью действия user.read

Вот где я застрял. Как я могу использовать существующий access_token для запроса дополнительной области?

Я могу использовать конечную точку oauth2/v2.0/token в сочетании с токеном refre sh, чтобы запросить токен для другой области (user.read). Это работает нормально, но я не хочу использовать для этого токен refre sh, а вместо этого использую access_token. Это вообще возможно и имеет смысл?

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Сценарий, который вы ищете, называется инкрементное согласие . Это полностью выполнимо с MSAL. Кстати, было бы здорово узнать, какую платформу вы разрабатываете.

Что вы можете сделать, это запросить токен доступа для user.read и ожидать, что MsalUiRequiredException будет выброшено. В этом улове вы делаете интерактивный звонок с user.read в качестве области. При таком подходе вы будете реализовывать пошаговое согласие . Обратите внимание, что user_impersonation все еще будет доступен для использования после этого, и ваш кэш токенов теперь будет иметь обе области действия.

0 голосов
/ 30 января 2020

Возможно ли это и имеет ли смысл?

Нет, вы не можете использовать токен доступа для получения нового токена доступа с дополнительным объемом.

Как вы сказали, вы можете использовать refre sh token, чтобы запросить новый токен доступа для другой области. Токены Refre sh не имеют указанного времени жизни. Обычно время жизни токенов refre sh относительно велико. Хотя токены refre sh не отменяются при использовании для получения новых токенов доступа, ожидается, что вы сбросите старый токен refre sh.

POST /{tenant}/oauth2/v2.0/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&scope=https://admin.services.crm.dynamics.com/user_impersonation user.read
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&client_secret=JqQX2PNo9bpM0uEihUPzyrh      // NOTE: Only required for web apps

И вы можете обратиться к этому учебнику .

...