码迷,mamicode.com
首页 > Web开发 > 详细

二、Core授权-2 之.net core 基于Jwt实现Token令牌(策略)

时间:2019-12-26 11:30:14      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:年龄   官方文档   ide   不同的   方式   策略   token   cee   policy   

Authorization其目标就是验证Http请求能否通过验证。ASP.Net Core提供了很多种Authorization方式,详细可以参考 微软官方文档。在这里只详细介绍三种方式:

Policy

Middleware

Custom Attribute

1、Policy : 策略授权

先定义一个IAuthorizationRequirement类来定义策略的要求,以下例子支持传递一个age参数。

    public class AdultPolicyRequirement : IAuthorizationRequirement
    {
        public int Age { get; }
        public AdultPolicyRequirement(int age)
        {
            //年龄限制
            this.Age = age;
        }
    }

然后定义策略要求的Handler,当提供的Controller被请求时先根据请求的Http报文来决定是否可以通过验证。

    public class AdultAuthorizationHandler : AuthorizationHandler
    {
        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, AdultPolicyRequirement requirement)
        {
            //获取当前http请求的context对象
            var mvcContext = context.Resource as AuthorizationFilterContext;
            //以下代码都不是必须的,只是展示一些使用方法,你可以选择使用
            ......
            //
            var age = mvcContext.HttpContext.Request.Query.FirstOrDefault(u => u.Key == "age");
            if (age.Value.Count <= 0|| Convert.ToInt16(age.Value[0]) < requirement.Age)
            {
                context.Fail();
            }
            else
            {
                //通过验证,这句代码必须要有
                context.Succeed(requirement);
            }
            return Task.CompletedTask;
        }
    }

还需要在启动时,在services里注册定义的策略和对应的Handler

    //添加二种认证策略,一种以12岁为界限,一种是18岁
    services.AddAuthorization(options =>
    {
        options.AddPolicy("Adult1", policy =>
            policy.Requirements.Add(new AdultPolicyRequirement(12)));
        options.AddPolicy("Adult2", policy =>
            policy.Requirements.Add(new AdultPolicyRequirement(18)));
    });
    //添加策略验证handler
    services.AddSingleton();

最后在相应的Controller前加上Authroize特性 [Authorize("Adult1")]。总体上Policy这种方式比较简单,但是也有不灵活的地方,不同的策略要求都需要提前在services里注册。

 

二、Core授权-2 之.net core 基于Jwt实现Token令牌(策略)

标签:年龄   官方文档   ide   不同的   方式   策略   token   cee   policy   

原文地址:https://www.cnblogs.com/fger/p/12100961.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!