1、EF Core 使用的补充

  1) 创建 接口 IEFCoreService

  2)   实现 接口 EFCoreService

  3) 在Startup.cs 中注册 ef 服务 并在控制器中注入使用 (这种方式不规范,只是对其基本使用的一些操作)

  注册服务代码

  services.AddScoped<IEFCoreService, EFCoreService>();

2、创建鉴权用到的类

//存放文件夹
AuthHelper
//api 返回处理器
ApiResponseHandler
//api 返回类型
ApiResponseType

//jwt 授权处理器
JwtAuthorizationHandler          这个类需要在Startup.cs 注册以下内容            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
//jwt 授权认证资源
JwtAuthorizationRequirement
//颁发 token 解析 token
JwtHelper
// 生成token 需要的实体 用户id 和角色
JwtTokenModel
// 用户角色 和 其拥有的url 资源
JwtUserRoleInfo

3、配置策略授权

     // 授权验证的资源
var jwtKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("xiaoqiyaozouxiaoqiyaozouxiaoqiyaozou"));//加密验证的key
var jwtCreds = new SigningCredentials(jwtKey, SecurityAlgorithms.HmacSha256); //根据key' 生成的标识
var jwtUserRoleInofs = new List<JwtUserRoleInfo>();//用户角色和用户拥有的api 集合 ,该角色只能访问其拥有的api
var jwtRequirement = new JwtAuthorizationRequirement(
jwtUserRoleInofs,
"",
ClaimTypes.Role,
expiration: TimeSpan.FromSeconds( * ),
"",
"Issuer",
"Audience",
jwtCreds
);
//注册策略授权
services.AddAuthorization(o =>
{
o.AddPolicy("MyPolicy", policy => policy.Requirements.Add(jwtRequirement));
})
       services.AddSingleton(jwtRequirement);//将该资源注册,可以在验证处理器种设置其值

4、配置验证异常处理器以及权限验证处理器

         //验证参数设置
var tokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = jwtKey,
ValidateIssuer = true,
ValidIssuer = "Issuer",//发行人
ValidateAudience = true,
ValidAudience = "Audience",//订阅人
ValidateLifetime = true,
ClockSkew = TimeSpan.FromSeconds(),
RequireExpirationTime = true,
}; // 开启Bearer认证
services.AddAuthentication(o => {
o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = nameof(ApiResponseHandler);
o.DefaultForbidScheme = nameof(ApiResponseHandler);
})
// 添加JwtBearer服务
.AddJwtBearer(o =>
{
o.TokenValidationParameters = tokenValidationParameters;
o.Events = new JwtBearerEvents
{
OnAuthenticationFailed = context =>
{
// 如果过期,则把<是否过期>添加到,返回头信息中
if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
{
context.Response.Headers.Add("Token-Expired", "true");
}
return Task.CompletedTask;
}
};
})
.AddScheme<AuthenticationSchemeOptions, ApiResponseHandler>(nameof(ApiResponseHandler), o => { }); // 注入权限处理器
services.AddScoped<IAuthorizationHandler, JwtAuthorizationHandler>();

5、jwt 验证的个人理解图

  

  

XiaoQi.Study项目(二)的更多相关文章

  1. XiaoQi.Study项目(一)

    项目地址:https://github.com/xiaoqiyaozou1/XiaoQi.Study 感谢:“老张的哲学”.“晓晨”.“杨旭”等大佬的知识分享 一.项目创建 vs 2019 创建 as ...

  2. XiaoQi.Study 项目(三)

    一.配置跨域 1.首先注册跨域要求 ,(可访问的IP.端口) //注册跨域 services.AddCors(options => { options.AddPolicy("XiaoQ ...

  3. Eclipse+Maven创建webapp项目<二> (转)

    Eclipse+Maven创建webapp项目<二> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...

  4. Vue小项目二手书商城:(四)详情页和购物车(emit、prop、computed)

    实现效果: 点击对应商品,对应的商品详情页出现,详情页里面还有“Add to cart”按钮和“×”退出按钮. 点击“Add to cart”可以将商品加入购物车,每件商品只能添加一次,如果把购物车的 ...

  5. Vue小项目二手书商城:(三)前端渲染数据

    实现内容: axios取到的数据在前端使用(父子组件各自应该怎么使用) 一.简单使用(在哪取在哪用) 1.在App.vue中script中加上data(data专属于当前组件,父子组件传参通过prop ...

  6. Vue小项目二手书商城:(二)axios前后端数据交互

    实现内容: 写路由接口(express) axios取数据 一.写接口 1.我们要在前端取到后端的数据(之前写的data.json)可以用vue-resourse或者用axios,在vue2之后官方就 ...

  7. Vue小项目二手书商城:(一)准备工作、组件和路由

    本项目基于vue2.5.2,与低版本部分不同之处会在(五)参考资料中提出 完整程序:https://github.com/M-M-Monica/bukesi 实现内容: 资源准备(mock数据) 组件 ...

  8. Eclipse+Maven创建webapp项目<二>

    Eclipse+Maven创建webapp项目<二> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...

  9. crm 系统项目(二) admin 后台操作表格

    crm 系统项目(二) admin 后台操作表格 1. app下创建 templates  运行的时候 先找全局的templates——> 按照app的注册顺序找templates中的文件 2. ...

随机推荐

  1. mongodb use where and custom function to query mongodb存储过程

    function name regexObjSubObjKey function code function(proto,value) { var match=false; var reg = new ...

  2. win10安装revit失败,怎么强力卸载删除注册表并重新安装

    一些搞设计的朋友在win10系统下安装revit失败或提示已安装,也有时候想重新安装revit的时候会出现本电脑windows系统已安装revit,你要是不留意直接安装revit,只会安装revit的 ...

  3. mysql中事务的并发问题与隔离级别

    回归一下事务的四大特性ACID 1.原子性(Atomicity) 事务开始后所有操作,要么全部做完,要么全部不做.事务是一个不可分割的整体.事务在执行过程中出错,会回滚到事务开始之前的状态,以此来保证 ...

  4. c中结构体边界对齐

    原则1.普通数据成员对齐规则:第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储). 原则2 ...

  5. 将js进行到底:node学习6

    开始真正的node web开发--express框架 为何说现在才是web开发的真正开始呢? 首先任何企业都不会用原生的http协议API去开发一个完整的网站,除非她们先开发一个框架出来,其次我们之前 ...

  6. Maximum Value(CodeForces - 484B)

    Maximum Value Time limit 1000 ms Memory limit 262144 kB You are given a sequence a consisting of n i ...

  7. react-native保存图片Android实现方法

    /图片的路径格式为远程请求, 例如:'http://xxx:8080/image.jpg' import { Platform, PermissionsAndroid, NativeModules } ...

  8. Jmeter连接mysql成功

    1 下载,mysql-connector-odbc-5.3.4-winx64.msi 进行安装  <转载> 2 安装后, copy "C:\ProgramFiles (x86)\ ...

  9. 获取网站title的脚本

    脚本在此 公司的商城需要添加一个脚本,这个脚本就是观察首页页面是否正常,虽然已经配置了zabbix监控网站是否200,但是有一些特殊的情况,比如网页可以打开但是页面是"file not fo ...

  10. 微信小程序配置二

    tabBar 客户端窗口底部的tab页面切换,只能配置最好两个.最多5个tab 属性说明: 属性 类型 必填 默认值 描述 color HexColor 是 tab上的文字默认颜色 selectedC ...