У нас есть основное веб-приложение asp.net, которое использует OpenIdDict для аутентификации. Я заметил, что мои вызовы Ajax без аутентификации возвращают 200 и нашу форму входа в тело ответа. Из того, что я прочитал, это ожидаемое поведение, поскольку OpenIdDict обрабатывает запрос, затем ядро ASP.NET обрабатывает его и возвращает 200. Ядро ASP.NET обрабатывает его, потому что «UseIdentity()» вызывается в Startup.cs. Все примеры, которые я видел для OpenIdDict, вызывают «UseIdentity». У меня есть 2 вопроса.
- Если я не хочу, чтобы ядро ASP.NET обрабатывало мой запрос, могу ли я просто удалить «UseIdentity()»? Я попробовал это, и теперь я получаю 401 вместо 200. Есть ли какой-либо вред в этом, или OpenIdDict требует «UseIdentity ()»?
- Если я не хочу потерять возможность перенаправления для входа в пользовательский интерфейс, это лучший/самый простой/безопасный способ выполнить это, чтобы переопределить OnRedirectToLogin? Пример кода ниже:
options.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents
{
OnRedirectToLogin = ctx =>
{
if (ctx.Request.Path.StartsWithSegments("/api") &&
ctx.Response.StatusCode == (int) HttpStatusCode.OK)
{
ctx.Response.StatusCode = (int) HttpStatusCode.Unauthorized;
}
else
{
ctx.Response.Redirect(ctx.RedirectUri);
}
return Task.FromResult(0);
}
};
Источник примера кода: https://devblog.dymel.pl/2016/07/07/return-401-unauthorized-from-asp-net-core-api/
Дальнейшее обсуждение этой проблемы здесь: https://github.com/aspnet/Security/issues/804