Cookie 和JWT 并存同一项目代码记录
Cookie管理后台管理,JWT对外提供接口验证
具体官方文档链接 使用 ASP.NET Core 中的特定方案授权
实现思路:
1.添加两种授权方式配置, AddAuthentication 的参数 defaultScheme 使用默认值,不进行赋值
2.对鉴权如有自定义策略,需要指定 AuthenticationSchemes
3.action的鉴权特性需要指明 AuthenticationSchemes
大体代码如下
services.AddAuthentication().AddCookie(option =>
{ option.Cookie.HttpOnly = true; option.LoginPath = new PathString("/Login/Index");
option.AccessDeniedPath = new PathString("/Login/Privacy");//无权限跳转地址 }).AddJwtBearer(option =>
{
option.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = false,//验证颁发者
ValidateAudience = false,//是否验证Audience
ValidateLifetime = true,//是否验证失效时间
ValidateIssuerSigningKey = true,//是否验证SecurityKey
// ValidAudience = "https://localhost:5001/",//
// ValidIssuer = "https://localhost:5001/",//Issuer,这两项和前面签发jwt的设置一致
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("12345678901qaz2wsx")),//拿到SecurityKey };
});
services.AddAuthorization(option =>
{ //自定义策略
option.AddPolicy("CustomPolicy", policy =>
{
policy.AuthenticationSchemes.Add(CookieAuthenticationDefaults.AuthenticationScheme); var customRequirement = new CustomRequirement()
{
PowerList = new List<RoleMenu>()
};
//此处需要从数据库获取权限集合,并注入单例,这样就可以在权限修改后对此单例直接修改权限集合
//测试数据
customRequirement.PowerList.Add(
new RoleMenu()
{
RoleId = "ceshi",
Url = "/home/Index"
}
);
policy.Requirements.Add(customRequirement);
});
});
鉴权action
/// <summary>
/// Cookie 校验
/// </summary>
/// <returns></returns> [Authorize(AuthenticationSchemes = CookieAuthenticationDefaults.AuthenticationScheme)]
public IActionResult Index2()
{
Console.WriteLine(User.Claims.FirstOrDefault(t => t.Type == "time").Value);
return View();
}
/// <summary>
/// JWT 校验
/// </summary>
/// <returns></returns>
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public IActionResult Index3()
{
Console.WriteLine(User.Claims.FirstOrDefault(t => t.Type == "time").Value);
return Ok(User.Claims.FirstOrDefault(t=>t.Type== "time").Value);
}
Cookie 和JWT 并存同一项目代码记录的更多相关文章
- 完美解决asp.net core 3.1 两个AuthenticationScheme(cookie,jwt)共存在一个项目中
内容 在我的项目中有mvc controller(view 和 razor Page)同时也有webapi,那么就需要网站同时支持2种认证方式,web页面的需要传统的cookie认证,webapi则需 ...
- 记录项目代码迁移后,UI测试框架的搭建(配置文件的修改、测试脚本试运行)
前文:记录一次项目代码迁移过程 上文代码迁移的目的就是为了新增vue脚手架自带的UI测试框架,工具有了,就需要实践运行在项目中了(修改配置文件.编写测试脚本等). 一.单元测试 测试框架 karma ...
- 借助GitHub托管你的项目代码
PS:话说自己注册了GitHub都很久了,却没有怎么去弄,现在系统学习一下,也把自己的学习经历总结下来share给大家,希望大家都能把GitHub用起来,把你的项目代码happy地托管起来! 一.基本 ...
- .NET 项目代码风格要求
原文:http://kb.cnblogs.com/page/179593/ 项目代码风格要求 PDF版下载:项目代码风格要求V1.0.pdf 代码风格没有正确与否,重要的是整齐划一,这是我拟的一份&l ...
- IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)
IntelliJ IDEA 乱码解决方案 (项目代码.控制台等) 最近IDE从eclipse改成IntelliJ IDEA 了,原因是公司大部分人都在用这个IDE,而且一直推荐用,所以尝尝鲜.换的第一 ...
- 转: 借助GitHub托管你的项目代码
转自:http://www.cnblogs.com/edisonchou/p/5990875.html 备注: 原贴关于github使用说明,非常详细易懂.建议看原帖. 借助GitHub托管你的项目代 ...
- .Net 项目代码风格要求小结
代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求>,供大家参考. 1. C# 代码风格要求1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释. ...
- iOS:使用Github托管自己本地的项目代码方式三(命令行方式: Terminal Line)
使用终端命令行将本地项目代码上传到github上进行托管 对于IOS开发者来说,Github的使用是必须要掌握的一种技能,而把项目由本地上传到Github有多种方式 1.开发工具Xcode配置Git, ...
- .NET之美——.Net 项目代码风格要求
.Net 项目代码风格要求 PDF版下载:项目代码风格要求V1.0.pdf 代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求>,供大家参考. 1. C# ...
随机推荐
- 应对告警风暴,Cloud Alert 实现告警风暴智能降噪
前言 睿象云前段时间发表了一篇< Zabbix 实现电话.邮件.微信告警通知的实践分享>的技术文章.它帮助我们非常轻松地支持了各种告警通知方式,但是存在一个严重的问题,我们经常接到各种相类 ...
- 说一说packet poll 错误掩码的一个bug tcp udp packet poll细节有所不同 处理时需要注意
今天处理一个cpu标高的bug,原因:在poll 返回后将error事件当做POLLIN事件处理,fd 一直都在唤醒线程处理,但是rcv的时候没有数据: unsigned int datagram_p ...
- c++ priority_queue应用(重要)
自定义排序 重写仿函数 struct cmp{ bool operator() ( Node a, Node b ){//默认是less函数 //返回true时,a的优先级低于b的优先级(a排在b的后 ...
- 用system v消息队列实现回射客户/服务器程序
客户端程序 #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include< ...
- 基于 Nebula Operator 的 K8s 自动化部署运维
摘要:Nebula Operator 是 Nebula Graph 在 Kubernetes 系统上的自动化部署运维插件.在本文,你将了解到 Nebula Operator 的特性及它的工作原理. 从 ...
- 运维和shell
什么是运维 术语名词 IDC--(Internet Data Center)互联网数据中心,主要服务包括整机租用.服务器托管.机柜租用.机房租用.专线接入和网络管理服务等.广义上的IDC业务,实际上就 ...
- 卸载python安装的软件
python源码安装的软件是无法通过命令卸载的,这个可以通过记录安装过程的形式来卸载安装的软件 以 python2.7.2 为例,在这个目录中有一个 setup.py 的文件,很显然这是安装程序,还是 ...
- Gin的中间件和路由分组
什么是分组 对router创建Group(就是分组), 对同一分组会拥有同一前缀和同一中间件 写法 eg: r := gin.Default() v1 := r.Group("/v1&quo ...
- tp5 删除图片以及文件
控制器调用 /** * [delimg 删除单张图片] * @return [type] [description] */ public function delimg(){ if (request( ...
- 面试官:小伙子,给我说一下spring框架吧
1. spring是什么 轻量级开源框架 以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核. 还能整 ...