81 lines
2.5 KiB
C#
81 lines
2.5 KiB
C#
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 请求拦截处理
|
|
/// </summary>
|
|
/// <param name="context">HTTP请求</param>
|
|
/// <returns></returns>
|
|
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
|
|
{
|
|
/// <summary>
|
|
/// 用户名
|
|
/// </summary>
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
}
|