Я пытаюсь войти в систему как мое зарегистрированное приложение с разрешениями, предоставленными на: Портал Azure > Регистрация приложений > Регистрация приложений (предварительная версия) > Имя моего приложения — разрешения API
Согласно эта документация, я должен передать свой идентификатор ресурса (APP ID URI) в параметре области при запросе токена. Я уверен, что именно этот параметр области действия вызывает у меня проблемы.
Пробовал разные параметры прицела.
https://graph.microsoft.com/.default: Это работает для основных функций, таких как чтение календаря, но я считаю, что разрешений по умолчанию очень мало для моих нужд. Поскольку это работает, я считаю, что другие мои параметры верны, а проблема заключается в области.
[APP-ID]/.default: Это дает мне успешный ответ, однако всякий раз, когда я пытаюсь сделать какой-либо запрос, включая базовый запрос на чтение календаря, я получаю InvalidAuthenticationToken. Я могу заверить вас, что я передаю правильный токен, полученный из запроса токена.
Несколько различных комбинаций URL-адресов на основе онлайн-предложений. Все они возвращаются
"The resource principal {resource-url} was not found in tenant {id}.
Я твердо уверен, что проблема в том, что я неправильно передаю APP ID URI для своего приложения. Может ли кто-нибудь сказать мне, где я могу найти этот ресурс? Все, что я искал в Интернете, старше 2 лет, и похоже, что это не то же самое для нового портала Azure.
Вам нужно передать идентификатор API, который вы хотите вызвать. Не ваш URI. Если вы используете «.default», вы должны определить разрешения приложения в разрешениях API и предоставить их. Обратите внимание, что вам нужны разрешения приложения, а не делегированные разрешения.
Я искал идентификатор Uris в манифесте, я получил: "identifierUris": []. Это наводит меня на мысль, что у меня нет URI идентификатора приложения, что странно.
Здравствуйте, juunas, я предоставил и утвердил разрешения приложения в соответствии со страницей API-Permission. Когда вы говорите «передать идентификатор», вы имеете в виду идентификатор приложения? Я попытался сделать [APP-ID]/.default, но это не сработало. Я попробую [APP-ID] как отдельное приложение.
Это связано с тем, что вы, возможно, еще не установили идентификатор URI идентификатора приложения для своего приложения. Тем не менее.. Я думаю, что @juunas уже хорошо объяснил это.. вам нужен идентификатор для API, который вы собираетесь вызывать.. получить токен для .. так что это будет идентификатор графа API, который, я полагаю, будет https://graph.microsoft.com
Кажется, я понимаю, что вы имеете в виду, я попробую и отвечу.
Хорошо, спасибо всем. Я думаю, что я неправильно понял, что первый вариант, указанный в моем вопросе, получает разрешение msgraph по умолчанию. Но я считаю, что на самом деле это дает разрешение, связанное с приложением.


Для учетных данных клиента (т. е. получения токена без пользователя) вам необходимо передать https://graph.microsoft.com/.default как ваш scope.
Разрешения, которые предоставляет https://graph.microsoft.com/.default, — это «Разрешения приложения», которые вы указали при регистрации приложения на портале:
После того, как вы добавили все «разрешения приложения», необходимые для вашего приложения, вам нужно «предоставить согласие» для этих областей в вашем клиенте (это кнопка внизу вкладки разрешений API).
После того, как вы это сделаете, вам нужно ввести POST в конечную точку /token (разрывы строк предназначены только для удобства чтения, это должна быть одна строка):
POST https://login.microsoftonline.com/{{tenantDomain}}/oauth2/token
Content-Type: application/x-www-form-urlencoded
client_id = {your-app-id}
&scope=https://graph.microsoft.com/.default
&client_secret = {your-client-secret}
&grant_type=client_credentials
Это вернет вам что-то вроде этого:
{
"token_type": "Bearer",
"expires_in": "3600",
"ext_expires_in": "3600",
"expires_on": "1554431330",
"not_before": "1554427430",
"resource": "00000003-0000-0000-c000-000000000000",
"access_token": "eyJ0eXAiOiJKV1QiLCJub25jZS..."
}
Когда вы вызываете Graph, вам нужно установить заголовок Authorization на token_type access_token. Таким образом, вызов /users будет выглядеть так:
GET https://graph.microsoft.com/v1.0/users
Authorization:"Bearer eyJ0eXAiOiJKV1QiLCJub25jZS..."
Host:"graph.microsoft.com"
Accept:"application/json"
@MinhalShanjer, MarcLaFleur, у меня похожая проблема. Я делаю запрос на получение токена доступа с помощью проводника Microsoft Graph. Я выполнил все шаги, указанные в вашем ответе, но не получил никакого ответа. В идеале я должен получить json, содержащий токен.
Вы можете проверить мой полный вопрос здесь: stackoverflow.com/questions/58798338/…
2 способа найти URI идентификатора приложения. 1) Отредактируйте манифест и найдите
identifierUris2) Перейдите в Azure AD > Регистрация приложений > Регистрация вашего приложения > Свойства. i.stack.imgur.com/V04A0.png