Графический API запрещает доступ, хотя я предоставил доступ

Я следил за инструкцией по быстрому запуску ASP.NET и работал над проектом.

API успешно восстанавливает мой адрес электронной почты - отлично.

Теперь я хочу получить список пользователей и получить некоторые из их свойств.

В GraphService:

public async Task GetUsers(GraphServiceClient graphClient)
{
 var users = await graphClient.Users.Request().Select("mail").GetAsync();
}

Который я вызываю (копирование метода для извлечения электронной почты пользователя):

var graphClient = SDKHelper.GetAuthenticatedClient();

await graphService.GetUsers(graphClient);

Но я получаю сообщение об ошибке

{Код: Authorization_RequestDeniedMessage: недостаточно прав для завершения операции. Внутренняя ошибка}

Несмотря на то, что я установил эти припасы:

Почему это так сложно? Я подключаюсь к API и получаю свой собственный адрес электронной почты, но я не могу ничего сделать...

Когда я запускаю https://graph.microsoft.com/v1.0/users в Graph Explorer, он возвращает всех пользователей просто отлично...

Пожалуйста, помогите

1 ответ

Если вы ссылаетесь на это примерное приложение, то я хочу упомянуть, чтобы получить доступ к токену, он использует метод ConfidentialClientApplication.AcquireTokenSilentAsync который принимает в качестве первого параметра список областей, запрашиваемых для ресурса. Эти области (делегированные разрешения) указываются в файле web.config через ключ ida:GraphScopes. Другими словами, независимо от того, какие разрешения были предоставлены при регистрации приложения, маркер доступа будет запрашиваться по областям, указанным с помощью ключа ida:GraphScopes.

Сказав это, чтобы этот запрос работал:

public async Task<igraphserviceuserscollectionpage> GetUsers(GraphServiceClient graphClient)
{
 return await graphClient.Users.Request().Select("mail").GetAsync();
}
</igraphserviceuserscollectionpage>

вы можете явно обновить делегированные разрешения в web.config:

<add key="ida:GraphScopes" value="User.Read User.ReadBasic.All"> 
</add>

Как проверять токен доступа

Разрешения для токена доступа могут быть проверены с помощью этой или этой службы. После декодирования делегированные разрешения представлены через атрибут scp, например:

scp: "Files.ReadWrite Mail.Send User.Read"

licensed under cc by-sa 3.0 with attribution.