用户是否在IDMsrv上有活动会话?
问题描述:
如何验证IDM是否拥有登录用户的活动会话?用户是否在IDMsrv上有活动会话?
详细信息 - 如果user'A'从浏览器'X'在IDM上有一个活动会话,当同一用户'A'尝试使用浏览器'Y'登录时,预期行为将标识该用户具有活动会话并使browser'X'会话。
背景 -
IDM与aspnetIdentity 客户端与隐性补助 (30秒identitytoken生活,确实一直没有去到登录页面,有望创下的IDM一些方法,然后我可以验证用户更新访问令牌默默地有权访问或不)!
答
Brock has already mentioned about it, It should be at the time of login and logout
它是有意义的,为什么它不是IDM。但至少在未来的版本中,它绝对有可能作为增强功能提供。
配置文件服务,IsActive方法是通过授权和 tokenvalidation结束点。
所以在登录时持续会话,然后当上面的代码命中做检查根据业务需求。
只要会话处于活动状态(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被重新启动的几个缺点,如果用户还没有正确地退出。
可能有更好的选择,这是不合适的。
更新: refer here duplicate/similar question
idmsrv endpoints are missing security change check
Should be like this @tibold