using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using DS.Module.Core.Extensions; using Microsoft.AspNetCore.Http; namespace DS.Module.UserModule; public class AspNetUser : IUser { private readonly IHttpContextAccessor? _accessor; public AspNetUser(IHttpContextAccessor accessor) { _accessor = accessor; } public string UserId => GetClaimValueByType("jti") ?? "90001"; public string UserName => GetClaimValueByType("UserName") ?? "IUser获取UserName意外为空"; public string TenantId => GetClaimValueByType("TenantId") ?? "90002"; public string TenantName => GetClaimValueByType("TenantName") ?? "IUser获取TenantName意外为空"; public long OrgId => GetClaimValueByType("OrgId")?.ObjToLong() ?? 90003; public string? GetClaimValueByType(string claimType) { return Claims.Where(x => x.Type == claimType).Select(x => x.Value).FirstOrDefault(); } private IEnumerable? _claims; public IEnumerable Claims { get { _claims ??= GetClaimsIdentity().ToList(); return _claims; } } IEnumerable GetClaimsIdentity() { if (_accessor.HttpContext == null) return ArraySegment.Empty; var token = GetToken(); var jwtHandler = new JwtSecurityTokenHandler(); if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token)) { JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token); return jwtToken.Claims; } else { return ArraySegment.Empty; } } public bool IsAuthenticated() { return _accessor.HttpContext?.User?.Identity?.IsAuthenticated ?? false; } public string GetToken() { var token = _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", ""); if (!string.IsNullOrWhiteSpace(token)) { return token; } return "IUser通过GetToken()获取Token意外为空"; //有需要再返回 //return _accessor.HttpContext?.Request.Headers["X-Token"].FirstOrDefault() // ?? _accessor.HttpContext?.Request.Query["Token"].FirstOrDefault() // ?? _accessor.HttpContext?.Request.Cookies["Token"] // ?? "东胜软件"; } }