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");
}