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();
}
}

AspNetCore Mvc 自定义中间件认证的更多相关文章

  1. .net core 1.0 Web MVC 自定义认证过程

    通过官方的介绍可知,若要本地开始部署搭建一个基于.net core 1.0的Web应用,需要下载dotnet SDK,或在Visual Studio IDE之上安装相关插件以布置开发环境.为了使开发环 ...

  2. asp.net core 3.1 自定义中间件实现jwt token认证

    asp.net core 3.1 自定义中间件实现jwt token认证 话不多讲,也不知道咋讲!直接上代码 认证信息承载对象[user] /// <summary> /// 认证用户信息 ...

  3. {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证

    Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...

  4. Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  5. ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介

    概述 之前写过一篇关于<ASP.NET Core 1.0 静态文件.路由.自定义中间件.身份验证简介>的文章,主要介绍了ASP.NET Core中StaticFile.Middleware ...

  6. NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介

    NET Core 1.1 静态文件.路由.自定义中间件.身份验证简介   概述 之前写过一篇关于<ASP.NET Core 1.0 静态文件.路由.自定义中间件.身份验证简介>的文章,主要 ...

  7. ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介

    概述 ASP.NET Core 1.0是ASP.NET的一个重要的重新设计. 例如,在ASP.NET Core中,使用Middleware编写请求管道. ASP.NET Core中间件对HttpCon ...

  8. IdentityServer4结合AspNetCore.Identity实现登录认证踩坑填坑记录

    也可以自定义实现,不使用IdentityServer4.AspNetIdentity这个包,当然还要实现其他接口IResourceOwnerPasswordValidator. IProfileSer ...

  9. gRPC asp.net core自定义策略认证

    在GitHub上有个项目,本来是作为自己研究学习.net core的Demo,没想到很多同学在看,还给了很多星,所以觉得应该升成3.0,整理一下,写成博分享给学习.net core的同学们. 项目名称 ...

随机推荐

  1. 运算符重载(C++)

    一.运算符重载机制: 一元运算符: @obj => operator @(obj) 二元运算符: obj@obj2 => operator @(obj,obj2) 注意:前置++.--与一 ...

  2. 【c++】多层次继承类对象的构造函数参数的传递方法

    #include <iostream.h> //基类CBase class CBase { int a; public: CBase(int na) { a=na; cout<< ...

  3. onsubmit return false仍提交表单

    博主之前遇到这样的问题,是因为代码有错,改正之后就正常了. 但今天确定代码没错,仍然return false提交表单. 总结网上各路大神的解释: 1.onsubmit的作用是防止form只有一个inp ...

  4. 【转】Https内部机制基础知识

    互联网权威机构 - CA 机构,又称为证书授权 (Certificate Authority) 机构,浏览器会内置这些"受信任的根证书颁发机构" (即 CA). 数字证书 提及 H ...

  5. hadoop 学习(三)之hdfs shell命令

    1.HDFS shell 1.0查看帮助  hadoop fs -help <cmd> 1.1上传  hadoop fs -put <linux上文件> <hdfs上的路 ...

  6. iOS与PHP/Android AES128 ECB NoPadding加密

    前言 谈谈AES加密,网上有很多的版本,当我没有真正在加密安全问题前,总以为百度出来某个AES加密算法就可以直接使用,实际上当我真正要做加密时,遇到了很多的坑,原来不是拿过来就能用的.写下本篇文章,记 ...

  7. python之零碎知识

    一 join方法 主要是做字符串的拼接:join后面跟的类型必须是要可迭代得到对象 for循环的对象是可迭代对象 # result = "".join(li) # print(re ...

  8. SharedPreferences的基本使用-----存,删,改,查

    1.创建一个SharedPreferences对象 SharedPreferences spf = context.getSharedPreferences("imageload" ...

  9. 2018.10.02 NOIP模拟 序列维护(线段树+广义欧拉定理)

    传送门 一道比较好的线段树. 考试时线性筛打错了于是弃疗. 60分暴力中有20分的快速幂乘爆了于是最后40分滚粗. 正解并不难想. 每次区间加打懒标记就行了. 区间查询要用到广义欧拉定理. 我们会发现 ...

  10. 2018.09.09 UVa10529 - Dumb Bones(期望dp)

    传送门 期望dp好题. f[i]表示摆放i个的最小花费,于是f[i]可以从f[j]与f[i-j+1]转移过来了. 代码: #include<bits/stdc++.h> #define N ...