using Furion; using Furion.Authorization; using Furion.DataEncryption; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using System.Threading.Tasks; using Waste.Application; namespace Waste.Web.Core { public class JwtHandler : AppAuthorizeHandler { /// /// 请求管道 /// /// /// /// public override Task PipelineAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext) { // 此处已经自动验证 Jwt token的有效性了,无需手动验证 // 检查权限,如果方法时异步的就不用 Task.FromResult 包裹,直接使用 async/await 即可 var ischecked = CheckAuthorzie(httpContext); // 这里写您的授权判断逻辑,授权通过返回 true,否则返回 false return Task.FromResult(ischecked); } /// /// 检查权限 /// /// /// private static bool CheckAuthorzie(DefaultHttpContext httpContext) { // 获取权限特性 var securityDefineAttribute = httpContext.GetMetadata(); if (securityDefineAttribute == null) return true; return App.GetService().CheckSecurity(securityDefineAttribute.ResourceId); } /// /// 自定义授权 /// /// /// public override async Task HandleAsync(AuthorizationHandlerContext context) { //自动刷新token if (JWTEncryption.AutoRefreshToken(context, context.GetCurrentHttpContext())) { await AuthorizeHandleAsync(context); } else { context.Fail(); } //// 常规授权(可以判断不是第三方) //var isAuthenticated = context.User.Identity.IsAuthenticated; //// 第三方授权自定义 //if (是第三方) //{ // foreach (var requirement in pendingRequirements) // { // // 授权成功 // context.Succeed(requirement); // } //} //// 授权失败 //else context.Fail(); } } }