using Furion.Authorization; using Furion.DataEncryption; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; namespace Yw.WebApi { /// /// JWT 授权自定义处理程序 /// public class JwtHandler : AppAuthorizeHandler { /// /// 自动刷新Token /// /// /// public override async Task HandleAsync(AuthorizationHandlerContext context) { var accessTokenExpire = Settings.Settings.ParasHelper.Auth.JWT.AccessTokenExpire; var refreshTokenExpire = Settings.Settings.ParasHelper.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的有效性了,无需手动验证 Yw.Untity.UserRegister.Regist ( Yw.JWT.UserManager.CorpID, Yw.JWT.UserManager.UserID, Yw.JWT.UserManager.AdminType, Yw.JWT.UserManager.UserName, Yw.JWT.UserManager.UserTag, Yw.JWT.UserManager.LoginAccountID, Yw.JWT.UserManager.LoginTypeID, Yw.JWT.UserManager.ProjectID, Yw.JWT.UserManager.SoftwareID ); // 检查权限,如果方法是异步的就不用 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; } } }