У меня есть приложение Angular 7, взаимодействующее с бэкэндом API .Net Core 2.2. Это связано с Azure Active Directory.
Со стороны Angular 7 он проходит аутентификацию должным образом с помощью AAD, и я получаю верный JWT, проверенный на jwt.io .
На стороне .Net Core API я создал простой тестовый API с [Authorize]
.
Когда я вызываю этот метод из Angular, после добавления токена Bearer я получаю (как виднов инструментах отладки Chrome, вкладка «Сеть», «Заголовки»):
WWW-Authenticate: Ошибка носителя = "invalid_token", error_description = "Ключ подписи не найден"
С HTTP / 1.1 401 Unauthorized .
Упрощенный API теста:
[Route("Secure")]
[Authorize]
public IActionResult Secure() => Ok("Secure works");
Код вызова Angular также прост, насколько я могу его получить:
let params : any = {
responseType: 'text',
headers: new HttpHeaders({
"Authorization": "Bearer " + token,
"Content-Type": "application/json"
})
}
this.http
.get("https://localhost:5001/api/azureauth/secure", params)
.subscribe(
data => { },
error => { console.error(error); }
);
Если я удаляю атрибут [Authorize]
и просто называю его как стандартный GET
запрос от Angular , он отлично работает .
Мой запуск. cs содержит:
services
.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureADBearer(options => this.Configuration.Bind("AzureAd", options));
Все параметры установлены правильно (например, ClientId, TenantId и т. д.) вappsettings.json и options
здесь заполняются, как и ожидалось.