Я использую аутентификацию в ASP. NET Ядро с социальными провайдерами, использующими промежуточное ПО аутентификации ( нет Идентификация). Все работает со следующей конфигурацией:
services
.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.RequireAuthenticatedSignIn = false;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
options.LoginPath = "/login";
options.LogoutPath = "/account/logout";
})
.AddGoogle(options =>
{
options.ClientId = "...";
options.ClientSecret = "...";
options.Events = new OAuthEvents
{
OnTicketReceived = ctx =>
{
...
}
};
});
При перенаправлении пользователя на вызов Google и его входе мой сайт успешно проходит проверку подлинности с помощью cook ie auth.
Теперь я Я хочу лучше контролировать то, что должно произойти, когда пользователь входит в систему. Я хочу проверить несколько требований в OnTicketReceived
и запретить вход с использованием cook ie auth.
Рассмотрим код, подобный этому, для OnTicketReceived
:
OnTicketReceived = ctx =>
{
if (someRequirementNotMet)
{
// User should not be logged in and redirected to /login
// CODE MISSING HERE!
}
if (someCondition)
{
// User should be logged in and redirected to /somepage
ctx.ReturnUri = "/somepage";
return Task.CompletedTask;
}
// User should be logged in and redirected to /someotherpage
ctx.ReturnUri = "/someotherpage";
return Task.CompletedTask;
}
Как бы мне этого добиться? Я пробовал это:
ctx.ReturnUri = "/login";
return Task.CompletedTask;
внутри первого if
. Но пользователь входит в систему при перенаправлении на /login
. Я также пытался позвонить ctx.HandleResponse()
, но это просто приводит к пустому результату.