using Microsoft.AspNetCore.Mvc.Filters;
using System.IdentityModel.Tokens.Jwt;
namespace OASystem.API
{
public class OASystemAuthentication : AuthorizeAttribute
{
public void OnAuthorization(AuthorizationFilterContext context)
{
string id = context.HttpContext.User.FindFirst("id")?.Value;
if (string.IsNullOrEmpty(id))
{
context.Result = new StatusCodeResult(401); //返回鉴权失败
return;
}
Console.WriteLine("我是Authorization过滤器");
// 请求的地址
//var url = context.HttpContext.Request.Path.Value;
// 请求头信息
var heads = context.HttpContext.Request.Headers;
string token = heads["Authorization"];
token = token.Replace("Bearer ", "");//去掉 "Bearer "才是真正的token
if (string.IsNullOrEmpty(token))
{
Console.WriteLine("校验不通过");
return;
}
//redis校验这个token的有效性,确定来源是sso和确定会话没过期
//解析员工userNumber
var jwtHandler = new JwtSecurityTokenHandler();
JwtSecurityToken securityToken = jwtHandler.ReadJwtToken(token);
//DateTime expDt = (securityToken.Payload[JwtRegisteredClaimNames.c] ?? 0).GetInt().GetTimeSpmpToDate();
//if (!_cacheService.StringGet<bool>($"token:{token}"))
//{
// Console.WriteLine($"token无效,token:{token}");
// context.Result = new StatusCodeResult(401); //返回鉴权失败
// return;
//}
}
}
}