Пытаясь перенести веб-API. NET Framework на. NET Core 2.2, я столкнулся с некоторыми проблемами при настройке аутентификации с использованием AD. У старого приложения было бы что-то вроде этого:
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = "contoso.onmicrosoft.com",
TokenValidationParameters = new TokenValidationParameters { ValidAudience = "1111..."}
});
Способ использования API заключается в следующем: веб-приложение обрабатывает аутентификацию (получает JWT) и использует указанный токен с нашим API для определенных действий. При поиске в Интернете я нашел этот образец, который использует Microsoft.AspNetCore.Authentication.AzureAD.UI
. Теперь я получил следующее:
appsettings.json
:
{
...
"AzureAd": {
"Domain": "contoso.onmicrosoft.com",
"Instance": "https://login.microsoftonline.com",
"TenantId": "2222...",
"ClientId": "1111..."
}
}
Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = AzureADDefaults.JwtBearerAuthenticationScheme;
options.DefaultChallengeScheme = AzureADDefaults.JwtBearerAuthenticationScheme;
});
}
public void Configure(IApplicationBuilder app)
{
app.UseAuthentication();
app.UseMvc();
}
Проблема заключается в том, что при использовании сгенерированного токена (это работает с приложением. NET Framework) Я получаю следующую ошибку: InvalidOperationException: No authenticationScheme was specified, and there was no DefaultChallengeScheme found.