AuthMiddleware.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System.Text;
  2. using System.Web;
  3. using Common;
  4. using Extensions;
  5. using Infrastructure;
  6. using Model.Base;
  7. using Util;
  8. namespace Filters
  9. {
  10. public class AuthMiddleware
  11. {
  12. public static string Do(HttpContext context)
  13. {
  14. string url = context.Request.Path;
  15. var options = App.OptionsSetting;
  16. var paths = options.GatewayFilterUrl;
  17. if(paths.Where(m => !m.Contains("*")).Contains(url))
  18. {
  19. return "success";
  20. }
  21. foreach(var path in paths.Where(m => m.Contains("*")))
  22. {
  23. if(url.StartsWith(path.TrimEnd('*')))
  24. {
  25. return "success";
  26. }
  27. }
  28. string ip = HttpContextExtension.GetClientUserIp(context);
  29. var isAuthed = context.User.Identity.IsAuthenticated;
  30. string osType = context.Request.Headers["os"];
  31. //使用jwt token校验2020-11-21
  32. TokenModel loginUser = JwtUtil.GetLoginUser(context);
  33. if (loginUser != null)
  34. {
  35. var nowTime = DateTime.UtcNow;
  36. TimeSpan ts = loginUser.ExpireTime - nowTime;
  37. //Console.WriteLine($"jwt到期剩余:{ts.TotalMinutes}分,{ts.TotalSeconds}秒");
  38. var CK = "token_" + loginUser.userId;
  39. if (!CacheHelper.Exists(CK) && ts.TotalMinutes < 5)
  40. {
  41. var newToken = JwtUtil.GenerateJwtToken(JwtUtil.AddClaims(loginUser));
  42. CacheHelper.SetCache(CK, CK, 1);
  43. //移动端不加下面这个获取不到自定义Header
  44. if (osType != null)
  45. {
  46. context.Response.Headers.Add("Access-Control-Expose-Headers", "X-Refresh-Token");
  47. }
  48. Utils.WriteLog($"userName={loginUser.username},token={newToken}", "刷新token");
  49. context.Response.Headers.Add("X-Refresh-Token", newToken);
  50. }
  51. }
  52. if (loginUser == null)
  53. {
  54. string msg = $"请求访问[{url}]失败,无法访问系统资源";
  55. return msg;
  56. }
  57. return "success";
  58. }
  59. }
  60. }