IwbAntiForgeryManagerMvcExtensions.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using System.Linq;
  2. using System.Net.Http;
  3. using System.Net.Http.Headers;
  4. using System.Web;
  5. using System.Web.Helpers;
  6. using Abp.Extensions;
  7. using Abp.Web.Security.AntiForgery;
  8. using IwbZero.ToolCommon.LogHelpers;
  9. namespace IwbZero.AntiForgery
  10. {
  11. public static class IwbAntiForgeryManagerMvcExtensions
  12. {
  13. #region MVC
  14. public static bool IsValid_Iwb(this IAbpAntiForgeryManager manager, HttpContextBase context)
  15. {
  16. var antiForgeryCookieValue = GetCookieValue(context, AntiForgeryConfig.CookieName);
  17. if (antiForgeryCookieValue.IsNullOrEmpty())
  18. {
  19. var authCookieValue = GetCookieValue(context, manager.Configuration.AuthorizationCookieName);
  20. return authCookieValue.IsNullOrEmpty();
  21. }
  22. var formOrHeaderValue = manager.Configuration.GetFormOrHeaderValue(context);
  23. if (formOrHeaderValue.IsNullOrEmpty())
  24. {
  25. return false;
  26. }
  27. return manager.As<IAbpAntiForgeryValidator>().IsValid(antiForgeryCookieValue, formOrHeaderValue);
  28. }
  29. private static string GetCookieValue(HttpContextBase context, string cookieName)
  30. {
  31. var cookie = context.Request.Cookies[cookieName];
  32. return cookie?.Value;
  33. }
  34. private static string GetFormOrHeaderValue(this IAbpAntiForgeryConfiguration configuration, HttpContextBase context)
  35. {
  36. var headerValues = context.Request.Headers.GetValues(configuration.TokenHeaderName);
  37. var headersArray = headerValues?.ToArray();
  38. if (headersArray == null || !headersArray.Any())
  39. {
  40. var formValue = context.Request.Form["__RequestVerificationToken"];
  41. if (!formValue.IsNullOrEmpty())
  42. {
  43. return formValue;
  44. }
  45. return null;
  46. }
  47. return headersArray.Last().Split(", ").Last();
  48. }
  49. #endregion
  50. #region API
  51. public static bool IsValid_Iwb(this IAbpAntiForgeryManager manager, HttpRequestHeaders headers)
  52. {
  53. var antiForgeryCookieValue = GetCookieValue(manager.Configuration.TokenCookieName, headers);
  54. if (antiForgeryCookieValue.IsNullOrEmpty())
  55. {
  56. var authCookieValue = GetCookieValue(manager.Configuration.AuthorizationCookieName, headers);
  57. return authCookieValue.IsNullOrEmpty();
  58. }
  59. var headerTokenValue = GetHeaderValue(manager, headers);
  60. if (headerTokenValue.IsNullOrEmpty())
  61. {
  62. return false;
  63. }
  64. // var flag= manager.As<IAbpAntiForgeryValidator>().IsValid(antiForgeryCookieValue, headerTokenValue);
  65. var flag = antiForgeryCookieValue == headerTokenValue;
  66. typeof(IwbAntiForgeryManagerMvcExtensions).LogDebug($"Result======>【Api】[{flag}]");
  67. return flag;
  68. }
  69. private static string GetCookieValue(string cookieName, HttpRequestHeaders headers)
  70. {
  71. var cookie = headers.GetCookies(cookieName).LastOrDefault();
  72. return cookie?[cookieName].Value;
  73. }
  74. private static string GetHeaderValue(IAbpAntiForgeryManager manager, HttpRequestHeaders headers)
  75. {
  76. if (!headers.TryGetValues(manager.Configuration.TokenHeaderName, out var headerValues))
  77. {
  78. return null;
  79. }
  80. var headersArray = headerValues.ToArray();
  81. if (!headersArray.Any())
  82. {
  83. return null;
  84. }
  85. return headersArray.Last().Split(", ").Last();
  86. }
  87. #endregion
  88. }
  89. }