JwtHandler.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using Admin.NET.Core;
  2. using Furion;
  3. using Furion.Authorization;
  4. using Furion.DataEncryption;
  5. using Microsoft.AspNetCore.Authorization;
  6. using Microsoft.AspNetCore.Http;
  7. using System.Threading.Tasks;
  8. namespace Admin.NET.Web.Core
  9. {
  10. public class JwtHandler : AppAuthorizeHandler
  11. {
  12. /// <summary>
  13. /// 自动刷新Token
  14. /// </summary>
  15. /// <param name="context"></param>
  16. /// <returns></returns>
  17. public override async Task HandleAsync(AuthorizationHandlerContext context)
  18. {
  19. if (JWTEncryption.AutoRefreshToken(context, context.GetCurrentHttpContext(),
  20. App.GetOptions<JWTSettingsOptions>().ExpiredTime,
  21. App.GetOptions<RefreshTokenOptions>().ExpiredTime))
  22. {
  23. await AuthorizeHandleAsync(context);
  24. }
  25. else
  26. {
  27. context.Fail(); // 授权失败
  28. DefaultHttpContext currentHttpContext = context.GetCurrentHttpContext();
  29. if (currentHttpContext == null)
  30. return;
  31. currentHttpContext.SignoutToSwagger();
  32. }
  33. }
  34. public override async Task<bool> PipelineAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext)
  35. {
  36. // 已自动验证 Jwt Token 有效性
  37. return await CheckAuthorzieAsync(httpContext);
  38. }
  39. /// <summary>
  40. /// 检查权限
  41. /// </summary>
  42. /// <param name="httpContext"></param>
  43. /// <returns></returns>
  44. private static async Task<bool> CheckAuthorzieAsync(DefaultHttpContext httpContext)
  45. {
  46. //// 管理员跳过判断
  47. //var userManager = App.GetService<UserManager>();
  48. //if (userManager.SuperAdmin) return true;
  49. //// 路由名称
  50. //var routeName = httpContext.Request.Path.Value[1..].Replace("/", ":");
  51. return await Task.FromResult(true);
  52. }
  53. }
  54. }