using DocumentFormat.OpenXml.Spreadsheet; using System.Security.Principal; using YLErp; namespace YLWebAPI.ApiModule { public class LoadUserMiddleware { readonly RequestDelegate next; public LoadUserMiddleware(RequestDelegate next) { this.next = next; } /// /// 请求拦截处理 /// /// HTTP请求 /// public async Task InvokeAsync(HttpContext context) { if (context.User.Identity?.IsAuthenticated == true) { var clientId = GetValueFromClaims(context, "clientId"); _ = int.TryParse(GetValueFromClaims(context, "userId"), out int userId); var userName = GetValueFromClaims(context, "userName"); var userGroup = GetValueFromClaims(context, "userGroup"); context.Items["ClientId"] = clientId; var userinfo = new AuthUserInfo(userId, userName, userGroup) { IpAddress = GetClientIpAddress(context) }; context.User = new GenericPrincipal(userinfo, null); } await next(context); } private static string GetValueFromClaims(HttpContext context, string claimKey) { var claim = context.User.FindFirst(claimKey); if (claim != null) { return claim.Value; } return string.Empty; } private static string GetClientIpAddress(HttpContext context) { return context.Connection.RemoteIpAddress?.ToString() + context.Connection.RemotePort; } public class AuthUserInfo : OptUserInfo, IIdentity { /// /// 用户名 /// public string Name => UserName; public string AuthenticationType => "JWT"; public bool IsAuthenticated => true; public AuthUserInfo(int userId, string userName, string userGroup) : base(userId, userName, OptUserFrom.WebAPI, userGroup) { } public string CreateJwtToken() { var identity = UserManager.CreateIdentity(UserId.ToString(), UserName, AuthHelper.JwtUserToken); var jwtToken = AuthHelper.CreateJwtToken(identity); return jwtToken; } } } }