protected override ClaimsIdentity CreateClaimsIdentity(JwtSecurityToken jwtToken, string issuer, TokenValidationParameters validationParameters)
        {
            ClaimsIdentity identity = base.CreateClaimsIdentity(jwtToken, issuer, validationParameters);

            if (identity.IsAuthenticated)
            {
                //由在线缓存获取用户信息赋给IIdentity
                IOnlineUserCache onlineUserCache = ServiceLocator.Instance.GetService <IOnlineUserCache>();
                OnlineUser       user            = onlineUserCache.GetOrRefresh(identity.Name);
                if (user == null)
                {
                    return(null);
                }
                // ============================= 此处附加用户信息 =============================
                //if (!string.IsNullOrEmpty(user.NickName))
                //{
                //    identity.AddClaim(new Claim(ClaimTypes.GivenName, user.NickName));
                //}
                //if (!string.IsNullOrEmpty(user.Email))
                //{
                //    identity.AddClaim(new Claim(ClaimTypes.Email, user.Email));
                //}

                if (user.Roles.Length > 0)
                {
                    //identity.AddClaim(new Claim(ClaimTypes.Role, user.Roles.ExpandAndToString()));
                    identity.AddClaim(new Claim("RoleId", user.Roles.ExpandAndToString()));
                }

                //identity.AddClaim(new Claim("test", "自定义的数据"));
            }


            return(identity);
        }
Пример #2
0
        /// <summary>
        /// Creates a <see cref="T:System.Security.Claims.ClaimsIdentity" /> from a <see cref="T:System.IdentityModel.Tokens.Jwt.JwtSecurityToken" />.
        /// </summary>
        /// <param name="jwtToken">The <see cref="T:System.IdentityModel.Tokens.Jwt.JwtSecurityToken" /> to use as a <see cref="T:System.Security.Claims.Claim" /> source.</param>
        /// <param name="issuer">The value to set <see cref="P:System.Security.Claims.Claim.Issuer" /></param>
        /// <param name="validationParameters"> Contains parameters for validating the token.</param>
        /// <returns>A <see cref="T:System.Security.Claims.ClaimsIdentity" /> containing the <see cref="P:System.IdentityModel.Tokens.Jwt.JwtSecurityToken.Claims" />.</returns>
        protected override ClaimsIdentity CreateClaimsIdentity(JwtSecurityToken jwtToken,
                                                               string issuer,
                                                               TokenValidationParameters validationParameters)
        {
            ClaimsIdentity identity = base.CreateClaimsIdentity(jwtToken, issuer, validationParameters);

            if (identity.IsAuthenticated)
            {
                //由在线缓存获取用户信息赋给IIdentity
                IOnlineUserCache onlineUserCache = ServiceLocator.Instance.GetService <IOnlineUserCache>();
                OnlineUser       user            = onlineUserCache.GetOrRefresh(identity.Name);
                if (user == null)
                {
                    return(null);
                }
                identity.AddClaims(new[]
                {
                    new Claim(ClaimTypes.GivenName, user.NickName),
                    new Claim(ClaimTypes.Email, user.Email)
                });
                if (user.Roles.Length > 0)
                {
                    identity.AddClaim(new Claim(ClaimTypes.Role, user.Roles.ExpandAndToString()));
                }
            }

            ScopedDictionary dict = ServiceLocator.Instance.GetService <ScopedDictionary>();

            dict.Identity = identity;
            return(identity);
        }
Пример #3
0
        public async Task <string> Test01()
        {
            List <object> list = new List <object>();

            IOnlineUserCache cache = ServiceLocator.Instance.GetService <IOnlineUserCache>();
            OnlineUser       user  = cache.GetOrRefresh("admin");

            list.Add(user.ToJsonString());

            return(list.ExpandAndToString("\r\n"));
        }
Пример #4
0
        public async Task <AjaxResult> Jwtoken([FromBody] LoginDto dto)
        {
            Check.NotNull(dto, nameof(dto));

            if (!ModelState.IsValid)
            {
                return(new AjaxResult("提交信息验证失败", AjaxResultType.Error));
            }
            dto.Ip        = HttpContext.GetClientIp();
            dto.UserAgent = Request.Headers["User-Agent"].FirstOrDefault();

            OperationResult <User> result = await _identityContract.Login(dto);

            IUnitOfWork unitOfWork = ServiceLocator.Instance.GetService <IUnitOfWork>();

            unitOfWork.Commit();

            if (!result.Successed)
            {
                return(result.ToAjaxResult());
            }
            User user    = result.Data;
            bool isAdmin = _identityContract.Roles.Any(m =>
                                                       m.IsAdmin && _identityContract.UserRoles.Where(n => n.UserId == user.Id).Select(n => n.RoleId).Contains(m.Id));
            IList <string> roles = await _userManager.GetRolesAsync(user);

            //生成Token
            Claim[] claims =
            {
                new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
                new Claim(ClaimTypes.Name,           user.UserName),
                new Claim(ClaimTypes.GivenName,      user.NickName ?? user.UserName),
                new Claim(ClaimTypes.Email,          user.Email),
                new Claim(JwtClaimTypes.HeadImage,   user.HeadImg ?? ""),
                new Claim(JwtClaimTypes.IsAdmin,     isAdmin.ToLower()),
                new Claim(ClaimTypes.Role,           roles.ExpandAndToString())
            };
            string token = JwtHelper.CreateToken(claims);

            //在线用户缓存
            IOnlineUserCache onlineUserCache = ServiceLocator.Instance.GetService <IOnlineUserCache>();

            if (onlineUserCache != null)
            {
                await onlineUserCache.GetOrRefreshAsync(user.UserName);
            }

            return(new AjaxResult("登录成功", AjaxResultType.Success, token));
        }
Пример #5
0
        public UserHub(
            IDocumentSession documentSession,
            IUserViewFactory userViewFactory,
            IBackChannelService backChannelService,
            IOnlineUserCache onlineUserCache)

        {
            Check.RequireNotNull(documentSession, "documentSession");
            Check.RequireNotNull(userViewFactory, "userViewFactory");
            Check.RequireNotNull(backChannelService, "backChannelService");
            Check.RequireNotNull(onlineUserCache, "onlineUserCache");

            _documentSession    = documentSession;
            _userViewFactory    = userViewFactory;
            _backChannelService = backChannelService;
            _onlineUserCache    = onlineUserCache;
        }
Пример #6
0
        public async Task <AjaxResult> Jwtoken(LoginDto dto)
        {
            Check.NotNull(dto, nameof(dto));

            if (!ModelState.IsValid)
            {
                return(new AjaxResult("提交信息验证失败", AjaxResultType.Error));
            }
            dto.Ip        = HttpContext.GetClientIp();
            dto.UserAgent = Request.Headers["User-Agent"].FirstOrDefault();

            OperationResult <User> result = await _identityContract.Login(dto);

            IUnitOfWork unitOfWork = HttpContext.RequestServices.GetUnitOfWork <User, int>();

            unitOfWork.Commit();

            if (!result.Successed)
            {
                return(result.ToAjaxResult());
            }
            User user = result.Data;

            //生成Token,这里只包含最基本信息,其他信息从在线用户缓存中获取
            Claim[] claims =
            {
                new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
                new Claim(ClaimTypes.Name,           user.UserName)
            };
            OSharpOptions options = HttpContext.RequestServices.GetService <IOptions <OSharpOptions> >().Value;
            string        token   = JwtHelper.CreateToken(claims, options);

            //在线用户缓存
            IOnlineUserCache onlineUserCache = HttpContext.RequestServices.GetService <IOnlineUserCache>();

            if (onlineUserCache != null)
            {
                await onlineUserCache.GetOrRefreshAsync(user.UserName);
            }

            return(new AjaxResult("登录成功", AjaxResultType.Success, token));
        }
Пример #7
0
        private async Task <string> CreateJwtToken(User user)
        {
            //在线用户缓存
            IOnlineUserCache onlineUserCache = HttpContext.RequestServices.GetService <IOnlineUserCache>();

            if (onlineUserCache != null)
            {
                await onlineUserCache.GetOrRefreshAsync(user.UserName);
            }

            //生成Token,这里只包含最基本信息,其他信息从在线用户缓存中获取
            Claim[] claims =
            {
                new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
                new Claim(ClaimTypes.Name,           user.UserName)
            };
            OsharpOptions options = HttpContext.RequestServices.GetService <IOptions <OsharpOptions> >().Value;
            string        token   = JwtHelper.CreateToken(claims, options);

            return(token);
        }
Пример #8
0
        public UserViewModelQuery(
            IDocumentSession documentSession,
            IUserViewFactory userViewFactory,
            IGroupViewFactory groupViewFactory,
            IUserContext userContext,
            IDateTimeZoneService dateTimeZoneService,
            IOnlineUserCache onlineUserCache)
        {
            Check.RequireNotNull(documentSession, "documentSession");
            Check.RequireNotNull(userViewFactory, "userViewFactory");
            Check.RequireNotNull(groupViewFactory, "groupViewFactory");
            Check.RequireNotNull(userContext, "userContext");
            Check.RequireNotNull(dateTimeZoneService, "dateTimeZoneService");
            Check.RequireNotNull(onlineUserCache, "onlineUserCache");

            _documentSession = documentSession;
            _userViewFactory = userViewFactory;
            _groupViewFactory = groupViewFactory;
            _userContext = userContext;
            _dateTimeZoneService = dateTimeZoneService;
            _onlineUserCache = onlineUserCache;
        }
Пример #9
0
        public ChatHub(
            IUserViewFactory userViewFactory,
            IGroupViewFactory groupViewFactory,
            IDocumentSession documentSession,
            IMessageBus messageBus,
            IPermissionManager permissionManager,
            IOnlineUserCache onlineUserCache)
        {
            Check.RequireNotNull(userViewFactory, "userViewFactory");
            Check.RequireNotNull(groupViewFactory, "groupViewFactory");
            Check.RequireNotNull(documentSession, "documentSession");
            Check.RequireNotNull(messageBus, "messageBus");
            Check.RequireNotNull(permissionManager, "permissionManager");
            Check.RequireNotNull(onlineUserCache, "onlineUserCache");

            _userViewFactory   = userViewFactory;
            _groupViewFactory  = groupViewFactory;
            _documentSession   = documentSession;
            _messageBus        = messageBus;
            _permissionManager = permissionManager;
            _onlineUserCache   = onlineUserCache;
        }
Пример #10
0
        public UserViewModelQuery(
            IDocumentSession documentSession,
            IUserViewFactory userViewFactory,
            IGroupViewFactory groupViewFactory,
            IUserContext userContext,
            IDateTimeZoneService dateTimeZoneService,
            IOnlineUserCache onlineUserCache)
        {
            Check.RequireNotNull(documentSession, "documentSession");
            Check.RequireNotNull(userViewFactory, "userViewFactory");
            Check.RequireNotNull(groupViewFactory, "groupViewFactory");
            Check.RequireNotNull(userContext, "userContext");
            Check.RequireNotNull(dateTimeZoneService, "dateTimeZoneService");
            Check.RequireNotNull(onlineUserCache, "onlineUserCache");

            _documentSession     = documentSession;
            _userViewFactory     = userViewFactory;
            _groupViewFactory    = groupViewFactory;
            _userContext         = userContext;
            _dateTimeZoneService = dateTimeZoneService;
            _onlineUserCache     = onlineUserCache;
        }
        /// <summary>
        /// Creates a <see cref="T:System.Security.Claims.ClaimsIdentity" /> from a <see cref="T:System.IdentityModel.Tokens.Jwt.JwtSecurityToken" />.
        /// </summary>
        /// <param name="jwtToken">The <see cref="T:System.IdentityModel.Tokens.Jwt.JwtSecurityToken" /> to use as a <see cref="T:System.Security.Claims.Claim" /> source.</param>
        /// <param name="issuer">The value to set <see cref="P:System.Security.Claims.Claim.Issuer" /></param>
        /// <param name="validationParameters"> Contains parameters for validating the token.</param>
        /// <returns>A <see cref="T:System.Security.Claims.ClaimsIdentity" /> containing the <see cref="P:System.IdentityModel.Tokens.Jwt.JwtSecurityToken.Claims" />.</returns>
        protected override ClaimsIdentity CreateClaimsIdentity(JwtSecurityToken jwtToken,
                                                               string issuer,
                                                               TokenValidationParameters validationParameters)
        {
            ClaimsIdentity identity = base.CreateClaimsIdentity(jwtToken, issuer, validationParameters);

            if (identity.IsAuthenticated)
            {
                //由用户名获取在线缓存的角色赋给Identity
                IOnlineUserCache onlineUserCache = ServiceLocator.Instance.GetService <IOnlineUserCache>();
                OnlineUser       user            = onlineUserCache.GetOrRefresh(identity.Name);
                Claim            roleClaim       = identity.Claims.FirstOrDefault(m => m.Type == ClaimTypes.Role);
                if (roleClaim != null)
                {
                    identity.RemoveClaim(roleClaim);
                }
                if (user.Roles.Length > 0)
                {
                    identity.AddClaim(new Claim(ClaimTypes.Role, user.Roles.ExpandAndToString()));
                }
            }

            return(identity);
        }
        /// <summary>
        /// 事件处理
        /// </summary>
        /// <param name="eventData">事件源数据</param>
        public override void Handle(OnlineUserCacheRemoveEventData eventData)
        {
            IOnlineUserCache onlineUserCache = ServiceLocator.Instance.GetService <IOnlineUserCache>();

            onlineUserCache.Remove(eventData.UserName);
        }
        /// <summary>
        /// 事件处理
        /// </summary>
        /// <param name="eventData">事件源数据</param>
        public override void Handle(OnlineUserCacheRemoveEventData eventData)
        {
            IOnlineUserCache onlineUserCache = _provider.GetService <IOnlineUserCache>();

            onlineUserCache.Remove(eventData.UserNames);
        }