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 并存同一项目代码记录的更多相关文章

  1. 完美解决asp.net core 3.1 两个AuthenticationScheme(cookie,jwt)共存在一个项目中

    内容 在我的项目中有mvc controller(view 和 razor Page)同时也有webapi,那么就需要网站同时支持2种认证方式,web页面的需要传统的cookie认证,webapi则需 ...

  2. 记录项目代码迁移后,UI测试框架的搭建(配置文件的修改、测试脚本试运行)

    前文:记录一次项目代码迁移过程 上文代码迁移的目的就是为了新增vue脚手架自带的UI测试框架,工具有了,就需要实践运行在项目中了(修改配置文件.编写测试脚本等). 一.单元测试 测试框架 karma ...

  3. 借助GitHub托管你的项目代码

    PS:话说自己注册了GitHub都很久了,却没有怎么去弄,现在系统学习一下,也把自己的学习经历总结下来share给大家,希望大家都能把GitHub用起来,把你的项目代码happy地托管起来! 一.基本 ...

  4. .NET 项目代码风格要求

    原文:http://kb.cnblogs.com/page/179593/ 项目代码风格要求 PDF版下载:项目代码风格要求V1.0.pdf 代码风格没有正确与否,重要的是整齐划一,这是我拟的一份&l ...

  5. IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)

    IntelliJ IDEA 乱码解决方案 (项目代码.控制台等) 最近IDE从eclipse改成IntelliJ IDEA 了,原因是公司大部分人都在用这个IDE,而且一直推荐用,所以尝尝鲜.换的第一 ...

  6. 转: 借助GitHub托管你的项目代码

    转自:http://www.cnblogs.com/edisonchou/p/5990875.html 备注: 原贴关于github使用说明,非常详细易懂.建议看原帖. 借助GitHub托管你的项目代 ...

  7. .Net 项目代码风格要求小结

    代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求>,供大家参考. 1. C# 代码风格要求1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释. ...

  8. iOS:使用Github托管自己本地的项目代码方式三(命令行方式: Terminal Line)

    使用终端命令行将本地项目代码上传到github上进行托管 对于IOS开发者来说,Github的使用是必须要掌握的一种技能,而把项目由本地上传到Github有多种方式 1.开发工具Xcode配置Git, ...

  9. .NET之美——.Net 项目代码风格要求

    .Net 项目代码风格要求 PDF版下载:项目代码风格要求V1.0.pdf 代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求>,供大家参考. 1. C# ...

随机推荐

  1. Spring Security验证,提示正确的信息

    关于Spring Security的使用,之前也整理过一些笔记,但是在提示信息的时候,总感觉还缺点什么?不管是不是前后端分离,我们都希望在登录验证出现错误的时候,能够提示友好的中文信息. 在前后端不分 ...

  2. 数论总结——更新ing

    数论还是有很多没学完 只是小小的总结 一.同余定理 1.反身性:\(a\equiv a (mod m)\) 2.对称性:若\(a\equiv b(mod m)\),则\(b\equiv a (mod ...

  3. Luogu P6833 【[Cnoi2020]雷雨】

    这道题赛时的时候想了一个奇怪的做法但是没过,后来经过Stay_hungry的提示就码了这道题. 雷电必定会在一点处分叉,分别电击地上的两个点,我们只需要枚举这个分叉点.那么怎么算出这个点和目标点的距离 ...

  4. UNP——第二章,端口号,套接字对,TCP,UDP输出

    1.端口号 端口号用于区分使用相同协议的进程. TCP69 与 UDP69 是不同的. 端口号范围 0 - 65535, 其中 0- 1023 是保留端口. 2.套接字对 TCP服务通过套接字对,唯一 ...

  5. 【java从入门到精通】day-07-逻辑运算符-位运算符-条件运算符-扩展赋值运算符

    逻辑与(&&).或(||).非(!) 示例: package operator;​public class Demo05 {    public static void main(St ...

  6. Kubernetes笔记(六):了解控制器 —— Deployment

    Pod(容器组)是 Kubernetes 中最小的调度单元,可以通过 yaml 定义文件直接创建一个 Pod.但 Pod 本身并不具备自我恢复(self-healing)功能.如果一个 Pod 所在的 ...

  7. 放弃腾讯75W年薪,回老家当公务员,提离职被领导教育。网友:leader嫉妒了

    最近一位腾讯员工自爆,"老家公务员政审已过,放弃腾讯75w年薪,提了离职被leader教育了".并且这位员工还晒出了领导"教育"自己的聊天记录,引发网友们的热议 ...

  8. C函数 printf 拼接字符串

    C函数 printf 拼接字符串 从前学C语言,最常用的函数可能就是 printf 了,但是往往是这样: printf(年龄是:"%d",a); 由于不懂得怎么拼接字符串,有时候只 ...

  9. python-基础入门-6快速入门总结

    快速入门 程序输出: 1.print语句,字符串用双引号括起来 _在解释器中表示最后一个表达式的值. print语句 与字符串格式(%)结合使用,能实现字符串替换功能. >>>pri ...

  10. window安装elasticsearch和kibana

    本次测试安装5.1.1版本 es下载地址:https://www.elastic.co/downloads/past-releases/elasticsearch-5-1-1 选择zip kibana ...