У меня есть приложение, которое разбито на веб-приложение (Asp .net MVC), которое общается со службой API, написанной на C # .net core 2.2. У меня есть веб-приложение, использующее встроенную аутентификацию AZure AD. Это отлично работает, поскольку запрашивает у пользователя идентификатор домена Azure и пароль и позволяет вводить только определенных пользователей.
Я сделал то же самое для службы API. Весь код startup.cs настроен правильно.
Я хотел бы использовать аутентификацию из веб-приложения и перейти к службе api, но не могу найти способ сделать это или даже получить к ней доступ.
Я пробовал добавлять разные схемы аутентификации (azureadbearer и jwtbearer), но они просто заставили веб-приложение не работать, никогда не запрашивали аутентификацию
В веб-приложении это использует Azure AD и требует аутентификации пользователей:
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options =>
{
Configuration.Bind("AzureAd", options);
});
в службе API у меня есть
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
но я не могу понять, как / что веб-приложение должно вызывать для авторизации или получения токена для службы api. Если я добавлю атрибут [Authorize] для контроллера api, я получу неавторизованную ошибку, вызывающую его из веб-приложения.
Я хотел бы иметь возможность использовать или получать токен, который был создан, когда пользователь авторизуется в веб-приложении, и пересылать его в службу api, но не видел в заголовках ничего похожего на токен jwt.
Я также попытался создать токен jwt в веб-приложении и установить заголовок авторизации (токен-носитель) и отправить его в службу api, а также изменил службу api, чтобы вместо этого использовать jwtbearer, но я все равно получу неавторизованный.
Я потратил дни, пытаясь найти примеры и заставить это работать безуспешно, любые предложения были бы очень признательны ... хотелось бы иметь возможность использовать встроенное промежуточное программное обеспечение AzureAD и не писать код, чтобы справиться с этим, если это возможно.
Это то, что я пробовал в службе api, но не проверял отправленный токен: s
services.AddAuthentication(AzureADDefaults.JwtBearerAuthenticationScheme).AddJwtBearer(cfg =>
{
cfg.RequireHttpsMetadata = true;
cfg.SaveToken = true;
cfg.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
{
ValidIssuer = Configuration["ServiceAd:Issuer"],
ValidAudience = Configuration["ServiceAd:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["ServiceAd:ClientSecret"]))
};
});