OpenIdConnect прерывает рабочий процесс

Я реализовал openId для подключения к приложению AspNetCore.

Когда пользователь входит в систему, я хочу прочитать флаг из БД и прервать рабочий процесс входа в систему, если пользователь заблокирован.

Единственное событие, когда у меня есть доступ к заявкам OpenId, это OnTokenValidated

Можно ли прервать рабочий процесс входа в систему из OpenId?

services
    .AddOpenIdConnect("Auth0", options => {
        // code removed for simplicity

        options.Events = new OpenIdConnectEvents
        {
            OnTokenValidated = async context =>
            {
                IUsersRepository usersRepository = context.HttpContext.RequestServices.GetService<IUsersRepository>();

                ClaimsPrincipal principal = context.Principal;
                string userId = principal.Claims.First(p => p.Type == "user_id").Value;

                var user = usersRepository.GetByExternalProviderIdentifier(userId, false);
                if(user.IsLocked == true)
                {
                    // although i redirect the user, the cookies are already created, and the user is logged-in.

                    // How can i abort the login workflow? ie. prevent the cookies from being saved
                    string redirectUrl = $"/Auth/Login?error={WebUtility.UrlEncode("Your account is locked")}";
                    context.Response.Redirect(redirectUrl);
                }

                return Task.FromResult(true);
            }
        };
    });

1 ответ

Вы можете использовать Fail метод контекста:

if(user.IsLocked == true)
{
     ...
     context.Fail("user is locked");
}
Другие вопросы по тегам