首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户是否在IDMsrv上有活动会话?

用户是否在IDMsrv上有活动会话?
EN

Stack Overflow用户
提问于 2017-08-28 01:52:33
回答 1查看 953关注 0票数 1

如何验证IDM是否有用户登录的活动会话?

细节-如果用户‘’从浏览器'X‘在IDM上有一个活动会话,当同一个用户'A’试图使用浏览器'Y‘登录时,预期的行为会识别该用户有活动会话并使浏览器’X‘会话失效。

背景-

IDM与aspnetIdentity客户端具有隐式授权(30秒的身份令牌生命周期,是否一直在默默地更新访问令牌而不登录页面,期望在登录页面上点击某个方法,那么我就可以验证用户是否有访问权限)!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-04 00:20:40

布洛克已经提到过了,应该是在登录和注销的时候。

这是合理的,为什么它不在Idm中。但至少在未来的版本中,提供这一增强功能是绝对可能的。

Profile,IsActive方法是授权和令牌验证的终结点。

因此,在登录时持久化会话,然后当上面的代码命中时,根据业务需求进行检查。

只要会话是活动的( cookie生存期),无声身份验证就会与应用程序逻辑一起传递。因此,这也可以由cookie生命周期来控制。

代码语言:javascript
复制
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;
    }

签注

代码语言:javascript
复制
 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45910885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档