using Furion.Authorization; using Furion.DataEncryption; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; namespace IStation.WebApi { /// /// JWT 授权自定义处理程序 /// public class JwtHandler : AppAuthorizeHandler { /// /// 自动刷新Token /// /// /// public override async Task HandleAsync(AuthorizationHandlerContext context) { var accessTokenExpire = Yw.Settings.AuthParasHelper.Auth.JWT.AccessTokenExpire; var refreshTokenExpire = Yw.Settings.AuthParasHelper.Auth.JWT.RefreshTokenExpire; if (JWTEncryption.AutoRefreshToken(context, context.GetCurrentHttpContext(), accessTokenExpire, refreshTokenExpire)) { await AuthorizeHandleAsync(context); } else { context.Fail(); // 授权失败 } } /// /// 请求管道 /// /// /// /// public override Task PipelineAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext) { // 此处已经自动验证 Jwt token的有效性了,无需手动验证 // 检查权限,如果方法是异步的就不用 Task.FromResult 包裹,直接使用 async/await 即可 return Task.FromResult(CheckAuthorzie(httpContext)); } /// /// 检查权限 /// /// /// private static bool CheckAuthorzie(DefaultHttpContext httpContext) { // 获取权限特性 var securityDefineAttribute = httpContext.GetMetadata(); if (securityDefineAttribute == null) return true; return true; } } }