Я искал некоторое время и нашел несколько сообщений с похожими проблемами, которые либо не отвечали, либо не работали для меня.
Справочная информация: у меня есть приложение Vue.JS с C # WebБэкэнд API 2, использующий проверку подлинности Windows в файле web.config, так как мы должны настроить наши сайты за брандмауэром компании. Первоначально у меня был токен Bearer, который работал, но команде по соответствию для компании не понравилось, что токен был доступен через локальное хранилище или хранилище сессий из браузера, и поэтому я переключился на аутентификацию cookie. У меня есть настройка аутентификации OWIN Cookie в Startup.cs:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
CookieHttpOnly = true,
CookieSecure = CookieSecureOption.SameAsRequest,
ExpireTimeSpan = TimeSpan.FromMinutes(5),
LogoutPath = new PathString("/api/logout"),
Provider = new CookieAuthenticationProvider(),
SlidingExpiration = true
});
Контроллер входа использует следующий код:
IOwinContext context = HttpContext.Current.Request.GetOwinContext();
IAuthenticationManager authManager = context.Authentication;
UserPrincipal user = AdAuthenticationService.GeneratePrincipal(login["Username"], login["Password"]);
ClaimsIdentity identity = AdAuthenticationService.CreateIdentity(user);
authManager.SignIn(identity);
Файл cookie генерирует, но кажется, что [Атрибут Authorize] в вызовах API сравнивается с пользовательским контекстом входа в систему из IIS, в отличие от файла cookie, что позволяет успешно выполнять вызовы API без создания файла cookie.