AuthorizationFilter.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System.Text;
  2. using Common;
  3. using Extensions;
  4. using Infrastructure;
  5. using Infrastructure.Model;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Microsoft.AspNetCore.Mvc.Filters;
  8. using Services;
  9. //本命名空间暂时先不改,改动比较大2023年9月2日
  10. namespace Filters
  11. {
  12. /// <summary>
  13. /// </summary>
  14. public class AuthorizationFilter : IAuthorizationFilter
  15. {
  16. private readonly ISysLoginService SysLoginService;
  17. public AuthorizationFilter(ISysLoginService sysLoginService)
  18. {
  19. this.SysLoginService = sysLoginService;
  20. }
  21. /// <summary>
  22. /// </summary>
  23. /// <param name="context"></param>
  24. public void OnAuthorization(AuthorizationFilterContext context)
  25. {
  26. var request = context.HttpContext.Request;
  27. string content = "";
  28. if(context.HttpContext.Request.Method.ToLower() == "get")
  29. {
  30. content = context.HttpContext.GetQueryString();
  31. content = content.Substring(content.IndexOf("=") + 1);
  32. content = Decrypt(content);
  33. Dictionary<string, string> dic = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(content);
  34. string queryString = "";
  35. foreach(string key in dic.Keys)
  36. {
  37. queryString += key + "=" + dic[key] + "&";
  38. }
  39. request.QueryString = new QueryString("?" + queryString.TrimEnd('&'));
  40. }
  41. else if(context.HttpContext.Request.Method.ToLower() == "delete")
  42. {
  43. string path = request.Path.Value;
  44. path = path.Substring(0, path.LastIndexOf("/") + 1) + Decrypt(path.Substring(path.LastIndexOf("/") + 1));
  45. }
  46. else
  47. {
  48. content = context.HttpContext.GetBody();
  49. content = Decrypt(content);
  50. //{"username":"admin","password":"000000"}
  51. request.Body = new MemoryStream(Encoding.UTF8.GetBytes(content));
  52. //验证登录接口
  53. if(request.Path.Value.EndsWith("/oauth2/token"))
  54. {
  55. var scope = request.Query["scope"].ToString();
  56. var grantType = request.Query["grant_type"].ToString();
  57. bool checkLogin = SysLoginService.CheckLogin(scope, grantType, context.HttpContext.GetToken().Replace("Basic ", ""));
  58. if(!checkLogin)
  59. {
  60. string msg = $"请求访问失败,无法访问系统资源";
  61. context.Result = new JsonResult(ApiResult.Error(ResultCode.DENY, msg));
  62. }
  63. }
  64. }
  65. }
  66. public string Decrypt(string str)
  67. {
  68. str = str.Trim('"');
  69. str = Encoding.UTF8.GetString(Convert.FromBase64String(str));
  70. return Dbconn.AesDecrypt(str, Base.GlobalConstant.ApiKey, Base.GlobalConstant.ApiIv);
  71. }
  72. }
  73. }