DefaultAzureCredential: доступ к графику запрещен с учетными данными кода VisualStudio
Я пытаюсь прочитать свойства пользователя из графа ms внутри функции Azure. Для аутентификации я использовал класс DefaultAzureCredential из Azure.Identity.
Доступ с помощью учетных данных кэша общих токенов локально и учетных данных управляемой идентификации в Azure не проблема! Я хотел использовать учетные данные кода Visual Studio, но получаю сообщение об ошибке «Authorization_RequestDenied! Недостаточно прав для завершения операции», когда я вызываю API графа.
Проблема, похоже, связана с токеном доступа, который я получил с учетными данными VS Code. Учетная запись пользователя та же, что я использовал с учетными данными Shared Token Cache Credential.
Любые идеи? Спасибо.
Код:
DefaultAzureCredentialOptions options = new DefaultAzureCredentialOptions();
options.VisualStudioCodeTenantId = Environment.GetEnvironmentVariable("Debug_VisualStudioCodeTenantId");
var credential = new DefaultAzureCredential(options);
token = credential.GetToken(
new Azure.Core.TokenRequestContext(
new[] { "https://graph.microsoft.com/.default" }));
accessToken = token.Token;
var graphServiceClient = new GraphServiceClient(
new DelegateAuthenticationProvider((requestMessage) =>
{
requestMessage
.Headers
.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
return Task.CompletedTask;
}));
var users = await graphServiceClient.Users.Request().GetAsync(); // throw the forbidden exception
Исключение:"Код: Authorization_RequestDenied \ r \ nСообщение: недостаточно прав для завершения операции. \ R \ nВнутренняя ошибка: \ r \ n \ tAdditionalData: \ r \ n \ tdate: 2021-04-20T08:02:23 \ r \ n \ trequest-id: ... \ r \ n \ tclient-request-id: ... \ r \ nClientRequestId: ... \ r \ n "
1 ответ
После проверки токена, возвращаемого VS Code, кажется, что отсутствует необходимое делегированное разрешение / область действия. В документах говорится, что для перечисления пользователей требуется один из них:
User.ReadBasic.All, User.Read.All, User.ReadWrite.All, Directory.Read.All, Directory.ReadWrite.All, Directory.AccessAsUser.All
Поскольку принципалу службы, который использует VS Code, ничего из этого не требуется, он не будет работать. После попытки явно получить токен с требуемой областью, похоже, это тоже не работает.
Таким образом, учетные данные VS Code в настоящее время не подходят для этой цели. Вам понадобятся другие учетные данные или, возможно, используйте учетные данные секрета / сертификата клиента с вашей собственной регистрацией приложения.