Мы пытаемся создать микросервисный модуль, задачей которого является выборка всех пользователей с помощью Microsoft Graph API (/ users /) один раз в день и что-то с ними делать.
Мы следовали приведенному здесь руководству: https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_service и предоставили приложению Azure приложение Read.User.All:
Затем мы получили согласие администратора на это разрешение от блейда Azure.
Наш сервис использует библиотеку Microsoft.Identity.Client для получения токена:
var confidentialClientApplication = new ConfidentialClientApplication(
this.applicationId,
this.authority,
this.redirectUri,
this.credential,
new TokenCache(),
new TokenCache());
var result = await confidentialClientApplication.AcquireTokenForClientAsync(new[] { "https://graph.microsoft.com/.default" });
return result.AccessToken;
Затем мы создаем клиент Graph:
new GraphServiceClient(new DelegateAuthenticationProvider(
async requestMessage =>
{
var graphToken = await this.graphAuthProvider.GetAccessTokenAsync();
// Append the access token to the request
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", graphToken);
}));
Ниже приведена полезная нагрузка токена.Я возвращаюсь (некоторая информация опущена)
{
"aud": "https://graph.microsoft.com",
"iss": "https://sts.windows.net/<tenant_id>/",
"iat": 1527833423,
"nbf": 1527833423,
"exp": 1527837323,
"aio": "Y2dgYKgxbYzssLvLWfve6WbgtsdWAA==",
"app_displayname": "<app_name>",
"appid": "<app_id>",
"appidacr": "1",
"e_exp": 262800,
"idp": "https://sts.windows.net/<tenant_id>/",
"oid": "<subject_id>",
"sub": "<subject_id>",
"tid": "<tenant_id>",
"uti": "-XvIySkmuUOuqmQI0l8CAA",
"ver": "1.0"
}
И затем, пытаясь получить пользователей, я получаю сообщение об ошибке, в котором говорится, что приложение не имеет разрешения на доступ к этому ресурсу.