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