Я создаю API, который вызывается SPA (angular). Пользователь аутентифицируется с помощью Azure AD, а API использует AzureAdBearer для своей аутентификации.
Мне нужен бэкэнд для вызова Graph API от имени пользователя для вывода списка членов группы AD.
В соответствии с этой документацией , мне нужно одно из следующих разрешений:
User.ReadBasic.All, User.Read.All, Group.Read.All, Directory.Read.All
Поэтому я добавил User.ReadBasi c. Все в мой список разрешений API в регистрации приложения мой бэкэнд
Я использовал IAuthenticationProvider
для обработки аутентификации с использованием этого кода:
var app = ConfidentialClientApplicationBuilder.Create("{my client id}")
.WithAuthority("https://login.microsoftonline.com/{my tenant id}")
.WithClientSecret({my backend secret})
.WithLogging(Log, Microsoft.Identity.Client.LogLevel.Info, true)
.Build();
var token = await _httpContextAccessor.HttpContext.GetTokenAsync("access_token");
var userAssertion = new UserAssertion(token);
var result = await app.AcquireTokenOnBehalfOf(new[] { "https://graph.microsoft.com/.default" }, userAssertion)
.ExecuteAsync();
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
Результат успешный, когда я проверяю свой токен с помощью jwt .ms все кажется правильным, вот выдержка из этого:
"aud": "https://graph.microsoft.com",
"iss": "https://sts.windows.net/{my tenant id}/",
[...]
"app_displayname": "My app",
"appid": "{my client id}",
[...]
"scp": "User.ReadBasic.All profile openid email",
[...]
Однако при этом вызове с использованием GraphApiClient:
var client = new GraphServiceClient(authProvider);
var users = await client.Groups["group guid"].Members.Request().GetAsync();
Я получаю эту ошибку:
Code: Authorization_RequestDenied
Message: Insufficient privileges to complete the operation.