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