У нас есть приложение javascript, «обернутое» в приложении ASP Core MVC.Каждый AJAX-запрос от приложения javascript попадает в контроллер, украшенный [Authorize].
В нашем методе запуска мы определили схему AuhenticationScheme, указывающую на наш Identity Server.А затем еще одна схема для файлов cookie, в которой они в конечном итоге регистрируются как.
Чтобы обеспечить проверку подлинности всех входящих запросов, мы используем следующее:
app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated)
{
string auth = context.Request.Headers["Authorization"];
if (string.IsNullOrEmpty(auth) || !auth.StartsWith("Bearer ", System.StringComparison.OrdinalIgnoreCase))
{
await context.ChallengeAsync("oidce", new AuthenticationProperties {
RedirectUri = "/"
});
}
else
{
await next();
}
}
else
{
await next();
}
});
Теперь, если срок действия файла cookie истекаетзапускает ChallengeAsync, который на самом деле не работает, если вызов исходил из запроса AJAX, сделанного из браузера.Я подумал, так как у меня был контекст здесь, что он просто переопределит AJAX и заставит браузер запустить двустороннюю передачу.
Есть ли способ сказать браузеру, что «нет, это не AJAX-ответ, иди куда я тебе скажу "?