.net core JWT 权限分配

.net core 结合JWT认证对用户进行API授权,原理及实现参考asp.net core 集成JWT(二)token的强制失效,基于策略模式细化api权限,但是作者给出的代码在.net core 2.2下调试成功,在3及以上版本中调试失败,提示对象为空,错误代码为varhttpContext = (context.Resourceas Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext).HttpContext;

修改新代码如下

using System;

using System.Linq;

using System.Security.Claims;

using System.Threading.Tasks;

using Microsoft.AspNetCore.Authorization;

namespace haochaping.AuthManagement

{    public class PolicyHandler :AuthorizationHandler<PolicyRequirement>

{

        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PolicyRequirement requirement)

{

            var userPermissions = requirement.rolePermissions;

            //从AuthorizationHandlerContext转成HttpContext,以便取出表求信息

//  var httpContext = (context.Resource as Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext).HttpContext;

//请求Url

            var questUrl = (context.Resource as Microsoft.AspNetCore.Routing.RouteEndpoint).RoutePattern.RawText.ToString();

            //是否经过验证

            var isAuthenticated = context.User.Identity.IsAuthenticated;

            if (isAuthenticated)

{

                //用户名

                var userName = context.User.Claims.SingleOrDefault(s =>s.Type == ClaimTypes.NameIdentifier).Value;

                if (userPermissions.Any(w =>w.RoleName == userName && w.Url == questUrl.ToString()))

{

                    context.Succeed(requirement);

}

                else

                {

                    //无权限跳转到拒绝页面

                    context.Fail();

}

}

            return Task.CompletedTask;

}

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容