AspNetCore Mvc 自定义中间件认证

AspNetCore Mvc 自定义中间件认证

实现控制器访问验证和拦截.

1.注册政策。

例如:

services.AddAuthorization(options =>
{
    options.AddPolicy(policyName /* 1.1 政策名称 */ , policy =>
    {
        policy.RequireClaim(ClaimTypes.Name /* 1.2 政策要求 */);
        policy.AddAuthenticationSchemes(policyName /* 1.3 政策计划 */);
        policy.Requirements.Add(new YepAuthorizationRequirement(authorizationReq) /* 1.4 政策需求 */);
    });
})

说明:

  • 1.1 定义政策名称,政策名称用于控制器或者控制器方法的【AuthorizeAttribute】属性。
  • 1.2 政策要求,建议使用 ClaimTypes.Name 类型,其他类型部分测试后程序通不过,原因还在努力理解源码。
  • 1.3 政策计划,不必须。作用:请阅读政策计划。
  • 1.4 政策需求,不必须。作用:请阅读政策需求。

2.注册计划

例如:

services.AddAuthentication(policyName /* 2.1 计划名称 */)
.AddScheme<YepAuthenticationSchemeOptions /* 2.2 计划处理器配置项 */, YepAuthenticationHandler /* 2.3 计划处理器 */>(policyName /* 2.4 计划认证名称 */, null /* 2.5 展示名称 */, options => /* ⑦ 配置项自定义 */
{
    configure(options);
});

说明:

  • 2.1 计划名称,与 1.3 政策计划强关联,定义了该计划的控制器或方法,将按照计划执行验证。
  • 2.2 计划处理器配置项(必须继承AuthenticationSchemeOptions),为 2.3 (计划处理器) 提供计划执行中需要的参数或属性方法。
  • 2.3 计划处理器(必须继承AuthenticationHandler<T>并实现其抽象方法,其中泛型T2.2 中配置项的类),根据 2.2 提供的信息,进行接口访问信息验证。
  • 2.4 定义当前计划处理器中的计划名称。
  • 2.5 定义当前计划处理器中的计划显示名称。
  • 2.6 配置计划处理器配置项的项。

3.政策需求

例如:

public class YepAuthorizationRequirement : AuthorizationHandler<YepAuthorizationRequirement/* 3.1 政策需求 */>, /* 3.2 政策需求基类 */ IAuthorizationRequirement /* 3.3 政策需求接口 */
{
 public YepAuthorizationRequirement()
 {
 }
 public override async Task HandleAsync(AuthorizationHandlerContext context)
 {
     await base.HandleAsync(context);
     /* 3.4 政策需求检测结果 */
 }
 protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, YepAuthorizationRequirement requirement)
 {
     if (context.User.Identity.IsAuthenticated/* 3.5 检测是否满足政策需求 */)
     {
         context.Succeed(requirement); /* 3.6 设置当前政策需求为认证通过 */
     }
     return Task.CompletedTask;
 }
}

说明:

  • 3.1 政策需求,当前定义的政策需求类。
  • 3.2 政策需求基类(可继承 AuthorizationHandler<TRequirement>AuthorizationHandler<YepAuthorizationRequirement, AuthorizationFilterContext>类,并实现抽象方法),验证入口(核心:IAuthorizationHandler)。
  • 3.3 政策需求接口,必须(框架要求)。
  • 3.4 政策需求检测结果(核心:context.HasSucceeded,为 true 时,表示整个需求验证通过)。
  • 3.5 检测是否满足政策需求,对当前接口调用方进行详细的验证(如:控制器名称、方法名称等)。
  • 3.6 设置当前政策需求为认证通过。调用后表示当前用户满足请求要求,否则整个需求验证失败

参考代码: 参考代码:Vbtonsoft.AuthenticationCore

用法
public class Startup
{
 public void ConfigureServices(IServiceCollection services)
 {
     services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

     services.AddAuthenticationCore("Token", /*context => //? 对每个控制器的每个方法进行过滤,认证失败时执行 context.Fail() 即可;
     {

     },*/ options =>
     {
         options.Events = new YepAuthenticationEvents
         {
             OnMessageReceived = context => //? 接收消息是处理
             {

             },
             OnTokenValidate = context =>  //? 信息认证
             {
                 return SecurityTokenValidate.Success("10000");
             },
             OnTokenValidated = context => //? Identity 可用
             {
                 //? 处理业务逻辑
                 return Task.CompletedTask;
             }
         };
     });
 }

 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {
     if (env.IsDevelopment())
     {
         app.UseDeveloperExceptionPage();
     }
     //跨域
     app.UseCors(builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader().AllowCredentials());
     app.UseMvc();
 }
}

转载于:https://www.cnblogs.com/vbing/p/10038963.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值