Брок уже упоминал об этом, это должно быть во время входа и выхода
Это имеет смысл, почему его нет в Idm. но определенно возможно предоставить это как расширенную функцию, по крайней мере, в следующих версиях.
Служба профилей, метод IsActive является одним из конечных точек авторизации и проверки маркеров.
поэтому во время входа в систему сохраняется сеанс, а затем, когда приведенный выше код выполняет проверку в соответствии с бизнес-требованиями.
пока сеанс активен (время жизни файла cookie), автоматическая аутентификация будет проходить с помощью логики приложения. поэтому это также можно контролировать с помощью времени жизни файлов cookie.
public override async Task IsActiveAsync(IsActiveContext context)
{
var sub = context.Subject.GetSubjectId();
var user = await userManager.FindByIdAsync(sub);
//Check existing sessions
if (context.Caller.Equals("AccessTokenValidation", StringComparison.OrdinalIgnoreCase))
{
if (user != null)
context.IsActive = !appuser.VerifyRenewToken(sub, context.Client.ClientId);
else
context.IsActive = false;
}
else
context.IsActive = user != null;
}
войти
public async Task<IActionResult> Login(LoginInputModel model)
{
if (ModelState.IsValid)
{
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberLogin, false);
if (result.Succeeded)
{
//Update security stamp to invalidate existing sessions
//TODO: This didn't invalidate the existing cookie from another client
//var test= _userManager.UpdateSecurityStampAsync(_userManager.FindByEmailAsync(model.Email).Result).Result;
appUser.PersistSession(new UserSession
{
CreatedOn = DateTimeOffset.Now,
DeviceUniqueId = GetDeviceId(),
UserId = _userManager.FindByNameAsync(model.Email).Result.Id,
SId = httpContext.HttpContext.Session.Id,
ClientId= httpContext.HttpContext.Request.QueryString.Value.GetClientIdFromQuery(),
ExpiresOn = DateTimeOffset.Now.AddMinutes(appSettings.SessionTimeOut)
});
_logger.LogInformation(1, "User logged in.");
return RedirectToLocal(model.ReturnUrl);
}
У этого метода есть несколько недостатков, когда IIS перезапускается и если пользователь не вышел из системы должным образом.
могут быть лучшие варианты, это не лучший вариант.!
Обновление: см. здесь дубликат/похожий вопрос< /а>
на конечных точках idmsrv отсутствует проверка безопасности
Поднята проблема
Должно быть так а> @tibold
person
Jay
schedule
04.09.2017