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 验证的个人理解图

  

  

最新文章

  1. POJ2774 Long Long Message [后缀数组]
  2. linux Shell脚本编码格式
  3. nginx地址重写
  4. [笔记]--在Windows下配置Git
  5. hdu 4539(状态压缩dp)
  6. BIEE基本函数
  7. jenkins跑maven项目的时候报错,看评论
  8. 执行manage.py syncdb提示Unknown command: &#39;syncdb&#39;
  9. 使用Libgdx开发的FlappyBird(像素鸟、疯狂的小鸟)游戏源码
  10. 小程序跳转 H5 时 cookie 值处理问题
  11. Android运行时权限
  12. open suse 42.3常用软件源(包括阿里云)
  13. Django学习笔记之表单验证
  14. 图论.DP
  15. Oracle EBS FORM 设置块属性
  16. Java 自动装箱与拆箱(Autoboxing and unboxing)
  17. Caching漫谈--关于Cache的几个理论【转】
  18. IIS7.5 PHP环境HTTP经常500错误处理方法
  19. Mybatis之基于XML的调用存储过程与手动回滚事务
  20. MGR架构~单写模式架构的搭建

热门文章

  1. pycharm全局搜索快捷键无反应
  2. rancher1.6高可用集群搭建
  3. Android实习生 &mdash;&mdash; 屏幕适配及布局优化
  4. NERDTree快捷键
  5. 关于配置cordova的一些细节
  6. 【教程向】配置属于自己的vim
  7. C++走向远洋——62(项目二1、类模板)
  8. C++走向远洋——22(项目一,三角形,类)
  9. ndarray数组的索引和切片
  10. 【Network telemetry】谈谈网络遥感技术,从主动探测与被动探测再到Netflow与INT