From 9ca96199d92168fe221dda9aba56f55520a561d8 Mon Sep 17 00:00:00 2001 From: hutongqing <hutongqing@hnkhzn.com> Date: 星期二, 29 十月 2024 17:30:59 +0800 Subject: [PATCH] 1 --- WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs | 150 ++++++++++++++++++++++++-------------------------- 1 files changed, 72 insertions(+), 78 deletions(-) diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs index ca4e1ff..3c9aaeb 100644 --- a/WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs +++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs @@ -9,104 +9,90 @@ using System.Security.Claims; using System.Text; using System.Threading.Tasks; +using WIDESEAWCS_Core.Authorization; using WIDESEAWCS_Core.Const; using WIDESEAWCS_Core.DB; +using WIDESEAWCS_Core.Extensions; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_Core.Seed; +using ICacheService = WIDESEAWCS_Core.Caches.ICacheService; namespace WIDESEAWCS_Core.HttpContextUser { public class AspNetUser : IUser { private readonly IHttpContextAccessor _accessor; + private readonly ICacheService _cacheService; //private readonly ILogger<AspNetUser> _logger; - public AspNetUser(IHttpContextAccessor accessor/*, ILogger<AspNetUser> logger*/) + public AspNetUser(IHttpContextAccessor accessor, ICacheService cacheService) { _accessor = accessor; + _cacheService = cacheService; /*_logger = logger;*/ } - public string UserName => UserInfo.UserName; + public string UserName => GetUserInfoFromToken(ClaimTypes.Name).FirstOrDefault() ?? ""; - public int UserId => GetClaimValueByType("jti") == null ? 0 : GetClaimValueByType("jti").FirstOrDefault().ObjToInt(); - public long TenantId => UserInfo.TenantId; + public int UserId => GetClaimValueByType(JwtRegisteredClaimNames.Jti) == null ? 0 : GetClaimValueByType(JwtRegisteredClaimNames.Jti).FirstOrDefault()?.ObjToInt() ?? 0; - public int RoleId => UserInfo.RoleId; + public long TenantId => GetUserInfoFromToken(nameof(TenantId)).FirstOrDefault()?.ObjToLong() ?? -1; - public string Token => "throw new NotImplementedException()"; + public int RoleId => GetUserInfoFromToken(ClaimTypes.Role).FirstOrDefault()?.ObjToInt() ?? 0; - //public int SystemType => UserInfo.SystemType; + public string Token => GetToken(); + + public int MenuType => (_accessor.HttpContext?.Request.Headers.ContainsKey("uniapp") ?? false) ? 1 : 0; public bool IsAuthenticated() { - return _accessor.HttpContext.User.Identity.IsAuthenticated; + return _accessor.HttpContext?.User?.Identity?.IsAuthenticated ?? false; } - public string GetToken() { - return _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", ""); + string token = _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", "") ?? ""; + if (!token.IsNullOrEmpty()) + { + return token; + } + if (_accessor.HttpContext?.IsSuccessSwagger() == true) + { + token = _accessor.HttpContext.GetSuccessSwaggerJwt(); + if (token.IsNotEmptyOrNull()) + { + //UserInfo userInfo = JwtHelper.SerializeJwt(token); + //if (userInfo.UserId > 0) + //{ + // return token; + //} + List<Claim> claims1 = _accessor.HttpContext.User.Claims.ToList(); + if (_accessor.HttpContext.User.Claims.Any(s => s.Type == JwtRegisteredClaimNames.Jti)) + { + return token; + } + + var claims = new ClaimsIdentity(GetClaimsIdentity(token)); + _accessor.HttpContext.User.AddIdentity(claims); + return token; + } + } + token = _cacheService.Get(UserId.ToString()); + if (!string.IsNullOrEmpty(token)) { return token; } + return token; + + // string token = _cacheService.Get(UserId.ToString()); + //if (!string.IsNullOrEmpty(token)) { return token; } + //return string.Empty; + //return _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", "") ?? ""; } - private UserInfo _userInfo { get; set; } - - private UserInfo UserInfo + public void UpdateToke(string token) { - get - { - if (_userInfo != null) - return _userInfo; - - SqlSugarClient sqlSugarClient = new SqlSugarClient(new ConnectionConfig - { - ConfigId = MainDb.CurrentDbConnId, - DbType = MainDb.DbType, - ConnectionString = AppSettings.app(MainDb.ConnectionString).DecryptDES(AppSecret.DB), - IsAutoCloseConnection = true - }); - - dynamic userInfo = sqlSugarClient.Queryable(MainDb.UserTableName, "x").Where(MainDb.UserId, "=", UserId).Select(GetUserInfoSelectModels()).First(); - if (userInfo != null) - { - _userInfo = new UserInfo() - { - RoleId = userInfo.Role_Id, - TenantId = userInfo.TenantId, - UserName = userInfo.UserName, - }; - return _userInfo; - } - - return new UserInfo(); - } + _cacheService.AddOrUpdate(UserId.ToString(), token); } public bool IsSuperAdmin => IsRoleIdSuperAdmin(RoleId); - - public List<Permissions> Permissions => throw new NotImplementedException(); - - public UserInfo GetCurrentUserInfo() - { - return UserInfo; - } - - public List<SelectModel> GetUserInfoSelectModels() - { - List<SelectModel> selectModels = new List<SelectModel>() - { - new() { - FieldName = MainDb.TenantId - }, - new() { - FieldName = MainDb.RoleId, - }, - new() { - FieldName = MainDb.UserName - } - }; - return selectModels; - } public List<string> GetUserInfoFromToken(string ClaimType) { @@ -119,15 +105,14 @@ { JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token); - return (from item in jwtToken.Claims - where item.Type == ClaimType - select item.Value).ToList(); + List<string> items = (from item in jwtToken.Claims + where item.Type == ClaimType + select item.Value).ToList(); + return items; } return new List<string>() { }; } - - //public MessageModel<string> MessageModel { get; set; } public IEnumerable<Claim> GetClaimsIdentity() { @@ -142,17 +127,28 @@ return claims; } - return null; + return ArraySegment<Claim>.Empty; + } + + public IEnumerable<Claim> GetClaimsIdentity(string token) + { + var jwtHandler = new JwtSecurityTokenHandler(); + // token鏍¢獙 + if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token)) + { + var jwtToken = jwtHandler.ReadJwtToken(token); + + return jwtToken.Claims; + } + + return new List<Claim>(); } public List<string> GetClaimValueByType(string ClaimType) { - IEnumerable<Claim> claims = GetClaimsIdentity(); - if (claims != null) - return (from item in GetClaimsIdentity() - where item.Type == ClaimType - select item.Value).ToList(); - return null; + return (from item in GetClaimsIdentity() + where item.Type == ClaimType + select item.Value).ToList(); } public bool IsRoleIdSuperAdmin(int roleId) @@ -166,8 +162,6 @@ public long TenantId { get; set; } public int RoleId { get; set; } - - public int SystemType { get; set; } public string UserName { get; set; } -- Gitblit v1.9.3