Недостаточно прав для перечисления членов группы в Graph API - PullRequest
0 голосов
/ 15 января 2020

Я создаю 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 в регистрации приложения мой бэкэнд backend permissions

Я использовал 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.

1 Ответ

3 голосов
/ 15 января 2020

Для этого вызова var users = await client.Groups["group guid"].Members.Request().GetAsync(); требуется групповое разрешение (т.е. Group.Read.All).

У вас есть только права пользователя прямо сейчас (т.е. User.ReadBasic.All) .

...