Приложение Daemon получает токен доступа только для приложений без ролей - PullRequest
0 голосов
/ 07 мая 2019

У меня есть приложение JavaScript, которое требует, чтобы пользователь вошел в систему и нажал кнопку, затем запускает отчет, отправляет данные в Excel и отправляет электронное письмо. Я хочу автоматизировать это, чтобы пользователю не нужно было входить в систему и нажимать кнопку.

Я начал с этим кодом проекта: https://github.com/microsoftgraph/nodejs-apponlytoken-rest-sample

Я следовал инструкциям и смог получить токен доступа, но затем мой вызов API завершился неудачно с 401 несанкционированным. В качестве теста я пытаюсь отправить электронное письмо от своего имени, и у меня есть тип приложения Mail.Send, предоставленное администратором компании.

Я потратил много часов, читая документы и блоги, но не нашел решения. Этот документ лучше всего описывает, что я устраняю: https://blogs.technet.microsoft.com/sharepointdevelopersupport/2018/03/15/troubleshooting-assistance-with-microsoft-graph-api-development/.

В токене, который я получаю, нет ролей, как видно, когда я декодирую его с помощью JWT. Это единственное несоответствие, которое я обнаружил до сих пор.

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

В моем случае проблема была связана с конечной точкой и моим арендатором. Я использовал обычного арендатора, делающего вызовы API для токенов, потому что это то, что было указано в AzureAD для моего приложения. Я обнаружил, что для получения разрешений клиента приложения я должен использовать свой конкретный идентификатор арендатора, например 'https://login.microsoftonline.com/tenant_id/oauth2/token', при получении токенов с соответствующими ролями.

0 голосов
/ 14 мая 2019

Я не эксперт по Node, поэтому помогу вам с несколькими указателями, которые могут помочь.

Microsoft Graph имеет два типа разрешений: Делегированный и Приложение .Поэтому нужно кое-что узнать и проверить.

  1. Для делегированных разрешений требуется присутствие пользователя, они будут отображаться в утверждении scp в маркере доступа.Они получены веб-приложениями с использованием потока implicit_grant , Предоставление кода авторизации или от имени потока (обычно).

  2. Разрешения для приложения, требуется разрешение администратора и будет предоставлено вам в заявке ролей в маркере доступа .Для этого требуется, чтобы приложение получило токен доступа с помощью клиентских учетных данных .Обратите внимание, что они также присутствуют, когда пользователю назначена роль, как описано в в этом примере , но этот сценарий может быть неприменим в вашем случае.

У вашего приложения есть грант, предоставленный, как вы ожидаете?Вы можете проверить их с помощью Graph Explorer , используя следующие два остальных вызова.Будет запись OAuth2PermissionGrant с ожидаемой ролью в ней.

https://graph.microsoft.com/beta/OAuth2PermissionGrants https://graph.microsoft.com/beta/kalyankrishna.net/OAuth2PermissionGrants

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

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