У меня есть служба приложений Azure, которая проходит проверку подлинности с помощью Azure AD EasyAuth.
Я пытаюсь отправить запрос из другой службы приложений, используя C # и MSAL.NET (Microsoft.Identity.Client).
Код аутентификации выглядит так
var app = ConfidentialClientApplicationBuilder
.Create(config.ClientId) // The Client ID in the App Registration connected to the App Service
.WithClientSecret(config.ClientSecret)
.WithAuthority(new Uri(config.Authority)) // https://login.microsoftonline.com/tenant.onmicrosoft.com/v2.0
.WithTenantId(config.TenantId) // Tenant Id Guid
.Build();
// Used Scopes: ["https://graph.microsoft.com/.default"]
var credentials = await app.AcquireTokenForClient(config.Scopes)
.ExecuteAsync(cancellationToken);
Я успешно получаю токен на предъявителя, но когда я пытаюсь вызвать службу приложений с токеном, введенным в заголовки, я получаю 401 и You do not have permission to view this directory or page.
:(
Обновление 1:
Я попробовал ответить @Jim Xu, и он все еще дает мне 401. Он возвращает заголовок www-authenticate
со следующим значением
Идентификатор ресурса совпадает с ClientId в регистре приложения.
Обновление 2 - Решение
Итак, чтобы резюмировать исправление:
- Запрошенные области при вызове
AcquireTokenForClient
должны включать{Application ID Uri}/.default
- В конфигурации EasyAuth
Allowed Token Audiences
также необходимо установить наApplication ID Uri
.
AcquireTokenForClient
- person Ayman   schedule 23.02.2021scope
установлен как ваш api? - person Carl Zhao   schedule 23.02.2021https://graph.microsoft.com/.default
- person Ayman   schedule 23.02.2021