Я пытаюсь реализовать смешанную аутентификацию windows + cook ie на основе asp. net core mvc приложения. Когда аутентификация windows отменена, я хочу перенаправить пользователя на резервную страницу, где можно выбрать аутентификацию windows или приготовить ie. Приложение будет развернуто на Kestrel, а не IIS. Я использую. net ядро 3.1.
Обычно мне нужно перенаправить пользователя на резервную страницу, когда http-код состояния 401 и код подстатуса 1 или 2.
До сих пор я пытался использовать кодовые страницы статуса в качестве пары:
В Startup.cs я добавил
app.UseStatusCodePagesWithReExecute("/Error/Status", "?statusCode={0}");
В ErrorController.cs
public IActionResult Status(int statusCode)
{
var statusCodeReExecuteFeature = HttpContext.Features.Get<IStatusCodeReExecuteFeature>();
if (statusCode == 401)
{
return RedirectToAction("Index", "Fallback");
}
var originalURL =
statusCodeReExecuteFeature.OriginalPathBase
+ statusCodeReExecuteFeature.OriginalPath
+ statusCodeReExecuteFeature.OriginalQueryString;
return Redirect(originalURL);
}
Это не работает, потому что это нарушает windows аутентификацию рукопожатия.
Я также попытался реализовать собственный обработчик ошибок и проверить HttpResponse.StatusCode == 401, но метод контроллера ошибок не срабатывает, вероятно, потому что windows аутентификация обрабатывается другим уровнем ..