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、配置策略授权

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

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

  1. //验证参数设置
  2. var tokenValidationParameters = new TokenValidationParameters
  3. {
  4. ValidateIssuerSigningKey = true,
  5. IssuerSigningKey = jwtKey,
  6. ValidateIssuer = true,
  7. ValidIssuer = "Issuer",//发行人
  8. ValidateAudience = true,
  9. ValidAudience = "Audience",//订阅人
  10. ValidateLifetime = true,
  11. ClockSkew = TimeSpan.FromSeconds(),
  12. RequireExpirationTime = true,
  13. };
  14.  
  15. // 开启Bearer认证
  16. services.AddAuthentication(o => {
  17. o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
  18. o.DefaultChallengeScheme = nameof(ApiResponseHandler);
  19. o.DefaultForbidScheme = nameof(ApiResponseHandler);
  20. })
  21. // 添加JwtBearer服务
  22. .AddJwtBearer(o =>
  23. {
  24. o.TokenValidationParameters = tokenValidationParameters;
  25. o.Events = new JwtBearerEvents
  26. {
  27. OnAuthenticationFailed = context =>
  28. {
  29. // 如果过期,则把<是否过期>添加到,返回头信息中
  30. if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
  31. {
  32. context.Response.Headers.Add("Token-Expired", "true");
  33. }
  34. return Task.CompletedTask;
  35. }
  36. };
  37. })
  38. .AddScheme<AuthenticationSchemeOptions, ApiResponseHandler>(nameof(ApiResponseHandler), o => { });
  39.  
  40. // 注入权限处理器
  41. 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. Django环境的搭建以及最简示例

    一.环境的搭建 先安装pip yum install python-pip 安装失败: 安装epel扩展源 yum install epel-release 在安装pip 再利用pip安装django ...

  2. OpenSSL之X509系列

    OpenSSL之X509系列之1---引言和X509概述 [引言]    X509是系列的函数在我们开发与PKI相关的应用的时候我们都会用到,但是OpenSSL中对X509的描述并不是很多,鉴于些,我 ...

  3. 整合SSM遇到的错误,数据库连接失败问题集合

    Could not get JDBC Connection; nested exception is java.sql.SQLException: Connections could not be a ...

  4. cisco WLC开启portal认证,但是访问https无法跳转问题的解决

     config network web-auth https-redirect enable版本8,及以上才支持  官方文档: http://www.cisco.com/c/zh_cn/support ...

  5. Android ListView 常用技巧总结

    本文对 ListView 中的一些常用技巧做一个总结.附:虽然现在 RecyclerView 已逐渐取代 ListView,但实际情况是大部分项目中还在使用 ListView.当然,后续我会在我的博客 ...

  6. R的基础数据结构

  7. zepto.js和jquery.js函数比较有什么优点?

    1.Zepto.js 是专门为现代智能手机浏览器退出的 Javascript 框架, 拥有和jQuery相似的语法, 但是和jQuery相比下来, 他有很多优点, 大小方面 , 压缩后的 zepto. ...

  8. Flutter混合开发:Android接入Flutter

    Flutter Google推出已经已经一年多了,单个 Flutter 项目的开发流程已经很成熟了.对与个人开发者来说使用 Flutter 开发一个跨平台的App挺有意思.但是对于现有的项目改造来说还 ...

  9. linux下时区的一些认识

    最近搞ONVIF,在时间接口中有一个时区的字段,需要使用POSIX格式的时区,ONVIF手册要求符合IEEE100.3.1的第8章节,但要注册才能看IEEE标准,我印象中以前下载过,但找不到了.幸好, ...

  10. Inheritance Learning Note

    好几天没来学习了,昨晚把继承的又整理了一下.想把整理后的东西发到hexo博客上来,却发现命令行又失效了.前几天明明是好的,这几天又没有进行任何操作,网上搜了一下也没有招到合适的解决办法,无奈只能重装了 ...