using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.IdentityModel.Tokens.Jwt; using System.Linq; using System.Net; using System.Security.Claims; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_Core.Const; namespace WIDESEAWCS_Core.Authorization { public static class AuthorizationResponse { public static AuthorizationFilterContext FilterResult( this AuthorizationFilterContext context, HttpStatusCode statusCode, string? message = null) { context.Result = new ContentResult() { Content = new { message, status = false, code = (int)statusCode }.Serialize(), ContentType = "application/json", StatusCode = (int)statusCode }; //Logger.Info(LoggerType.ApiAuthorize, message); return context; } public static AuthorizationFilterContext Unauthorized(this AuthorizationFilterContext context, string? message = null) { return context.FilterResult(HttpStatusCode.Unauthorized, message); } //不通过JWT验证的,直接将用户信息缓存起来 public static void AddIdentity(this AuthorizationFilterContext context, int? userId = null) { int _userId = userId ?? JwtHelper.GetUserId(context.HttpContext.Request.Headers[AppSecret.TokenHeaderName]); if (_userId <= 0) return; //将用户Id缓存到上下文(或者自定一个对象,通过DI以AddScoped方式注入上下文来管理用户信息) var claims = new Claim[] { new Claim(JwtRegisteredClaimNames.Jti, _userId.ToString()) }; context.HttpContext.User.AddIdentity(new ClaimsIdentity(claims)); } } }