У меня есть приложение, которое разбито на веб-приложение (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"]))
};
});