.NET CORE 认证模块-Cookie、JWT 与自定义 Scheme
框架为我们提供了很多默认的实现在做一些中小项目在不涉及OIDC不构建身份认证中心的场景下通常选择使用Cookie和JWT的方式。同时框架内置了其他的一些实现例如基于oAuth2.0的实现包括谷歌、Facebook、GitHub等用于支持第三方登录。在我们日常开发场景下可能会接触使用一些飞书、微信等第三方登录但是原生框架中并没有直接提供实现。因为他们也遵循 oAuth2.0协议标准的我们可以自己封装集成进框架中注意是实现授权码流程还有其他几种流程模式可能不支持如果要区分出他们有什么不同的话可能需要搞清楚一些概念。1. 什么是OIDC2.什么是oAuth2.0?这里就不多做介绍比较偏理论理解串起来很头疼但是个人觉得还是得静下心来找一些书籍或者项目自己研究下不要草草的复制粘贴进AI工具回答的快忘记的也快AI作为辅助还可以成体系还是得自己梳理。2. 使用Cookie的认证方式在介绍之前我们必须先搞清楚一个概念有状态和无状态一句话就是指的是服务端要不要保存会话下面是无状态的请求流程和特点。特点服务端没有会话记录重启应用不影响已发出的 Cookie密钥还在就行退出登录 只删浏览器 Cookie服务端没有会话别人复制 Cookie在你退出登录前可能还有效多实例部署比较简单每台机器有一样的密钥就行因为Claims 都在里面所以Cookie 很长下面是有状态流程和特点特点服务端有会话记录能强制下线、踢人、查在线。退出登录 删服务端会话 清 Cookie旧 Cookie 立刻失效。多实例部署要 Redis 等共享存储否则会话查不到。Cookie 通常比无状态略短但还是长密文不是理解的那种guid那种。应用重启如果在内存的话会话全丢用户要重新登录。可以对比表格看下对比维度无状态默认 AddCookie有状态SessionStore / ITicketStore服务端是否存会话不存存内存 / Redis / DBCookie 里主要是什么加密后的完整 Ticket含 Claims加密后的会话引用SessionId每次请求怎么认人解密 Cookie → 直接得到 User解密 Cookie → 拿 SessionId → 查服务端 → 得到 User.NET Core 的 Cookie 认证方案在默认配置下是无状态的服务端不会存储认证票据服务端只需要从 HTTP 请求中读取 Cookie使用TicketDataFormat解密验证票据是否过期当然也可以使用有状态主要用于处理票据很大超过浏览器Cookie大小限制或需要做即时撤销的场景例如服务端踢人下线又或者是需要在多个服务实例间共享会话状态。我们先介绍在NETCORE中Cookie认证使用无状态模式怎么做。2.1 无状态Cookie集成思路第一步注册身份认证核心服务需要先在Program注册身份认证的核心服务以及常规配置使中间件可以调用对应服务。var authenticationBuilder builder.Services.AddAuthentication(options { // 设置默认的身份验证方案用于验证用户身份 // 当控制器未显式指定 AuthenticationSchemes 时系统自动使用 Cookie 方案 options.DefaultAuthenticateScheme CookieAuthenticationDefaults.AuthenticationScheme; // 设置默认的质询方案用于触发登录流程 // 当未认证用户访问受保护资源时系统自动重定向到 Cookie 登录流程 options.DefaultChallengeScheme CookieAuthenticationDefaults.AuthenticationScheme; // 要求用户必须通过 SignInManager.SignInAsync() 完成登录 // 防止仅通过 ClaimsPrincipal 构造的伪登录绕过安全检查 options.RequireAuthenticatedSignIn true; });第二步将Cookie认证方案和它的配置注入容器// 添加Cookie 身份验证方案 authenticationBuilder.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options { // 设置 Cookie 的名称浏览器中显示为 CodeSource.Auth // 不同应用必须使用唯一名称避免跨站冲突 options.Cookie.Name CodeSource.Auth; options.Cookie.HttpOnly true; options.ExpireTimeSpan TimeSpan.FromHours(8); // 过期时间 options.SlidingExpiration true; // 滑动过期 // 针对没认证但是访问资源将原本的重定向改为直接返回 401 options.Events.OnRedirectToLogin context { context.Response.StatusCode StatusCodes.Status401Unauthorized; return Task.CompletedTask; }; // 针对登录了但是没权限访问资源将原本的重定向改为直接返回 403 // 避免前端因重定向丢失原始请求上下文 options.Events.OnRedirectToAccessDenied context { context.Response.StatusCode StatusCodes.Status403Forbidden; return Task.CompletedTask; }; });第三步注册中间件通过app.UseXXX()方法将认证与授权中间件按顺序加入请求处理管道这里需要注意顺序先认证再授权所以中间件必须也要这样定义。至于为什么可以自行去补充下基础知识。var app builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); } app.UseHttpsRedirection(); app.UseSwaggerUI(); // 添加认证中间件 app.UseAuthentication(); // 添加授权中间件 app.UseAuthorization(); app.MapControllers(); app.Run();第四步在控制器中使用注意标记Authorize特性然后认证Scheme选择Cookie的方式。括号中的如果只有一种认证方式可以不写因为在前面配置时设置了默认方案。[ApiController] [Route([controller])] [Authorize(AuthenticationSchemes CookieAuthenticationDefaults.AuthenticationScheme)] public class UserController : ControllerBase { private static readonly User[] Users [ new User { Id 1, Name 张三, Email zhangsanexample.com }, new User { Id 2, Name 李四, Email lisiexample.com }, new User { Id 3, Name 王五, Email wangwuexample.com } ]; [HttpGet(Name GetUsers)] public IEnumerable Get() { return Users; } }

相关新闻

3 款主流遥感数据集对比:DOTA、xView、HRRSD 在尺度与类别上的差异分析

3 款主流遥感数据集对比:DOTA、xView、HRRSD 在尺度与类别上的差异分析

3 款主流遥感数据集对比:DOTA、xView、HRRSD 在尺度与类别上的差异分析遥感目标检测作为计算机视觉与地理信息科学的交叉领域,其核心挑战在于处理复杂场景下多尺度目标的精准识别。数据集的选择往往决定了算法研发的起点高度,而DOTA、xView和…

2026/7/6 23:32:39阅读更多 →
GPT-4o 多模态解析:从《狮子、老虎和熊》看 AI 如何理解文学中的城市与荒野

GPT-4o 多模态解析:从《狮子、老虎和熊》看 AI 如何理解文学中的城市与荒野

GPT-4o 多模态解析:从《狮子、老虎和熊》看 AI 如何理解文学中的城市与荒野中央公园的夜晚总是充满矛盾——既是都市人逃离钢筋水泥的绿洲,又是犯罪与危险的代名词。当比尔比福德在《狮子、老虎和熊》中记录这段冒险时,他可能不会想到&#x…

2026/7/6 23:32:39阅读更多 →
Tampermonkey 脚本开发实战:10个JS函数实现中国大学MOOC题目一键复制

Tampermonkey 脚本开发实战:10个JS函数实现中国大学MOOC题目一键复制

Tampermonkey脚本开发实战:构建中国大学MOOC题目复制工具在当今在线教育蓬勃发展的时代,中国大学MOOC作为国内领先的在线学习平台,为无数学习者提供了优质课程资源。然而,许多用户在学习过程中面临一个共同痛点:无法便…

2026/7/6 23:27:39阅读更多 →
终极配置指南:vJoy虚拟摇杆完整教程

终极配置指南:vJoy虚拟摇杆完整教程

终极配置指南:vJoy虚拟摇杆完整教程 【免费下载链接】vJoy Virtual Joystick 项目地址: https://gitcode.com/gh_mirrors/vj/vJoy 想要在Windows电脑上体验专业游戏手柄的控制感,却不想购买昂贵的硬件设备?vJoy虚拟摇杆工具为您提供了…

2026/7/7 0:42:44阅读更多 →
如何使用Conda国内源安装虚拟环境(保姆级全平台教程)

如何使用Conda国内源安装虚拟环境(保姆级全平台教程)

一、前言 日常使用Anaconda/Miniconda创建Python虚拟环境时,绝大多数开发者都会遇到同一个痛点:Conda默认海外源网络延迟极高,下载几十分钟甚至频繁超时、安装失败、依赖解析卡死。 国内高校开源镜像站(清华镜像)完美解…

2026/7/7 0:42:44阅读更多 →
别被“函数”吓住——C语言函数,其实就是你的“万能小工具”

别被“函数”吓住——C语言函数,其实就是你的“万能小工具”

小白也能听懂的C语言函数指南,从此写代码不再“一锅炖”一、先问你一个问题假如你要做一顿番茄炒蛋,你会怎么做?洗番茄 → 切番茄 → 打蛋 → 炒 → 放盐 → 出锅如果你把每一步都写在一个大流程里,以后想做蛋炒饭,又得…

2026/7/7 0:42:44阅读更多 →
Paperxie 毕业论文智能写作好用吗?过来人完整实测对话版

Paperxie 毕业论文智能写作好用吗?过来人完整实测对话版

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/科研绘图毕业论文 - PaperXie智能写作PaperXieAi论文智能生成软件,10分钟生成万字毕业论文、期刊论文、文献综述、PPT,Aigc查重、降重报告、文献资料。只需一个标题,从开…

2026/7/7 0:42:44阅读更多 →
告别网络限制:VBrowser-Android视频缓存解决方案

告别网络限制:VBrowser-Android视频缓存解决方案

告别网络限制:VBrowser-Android视频缓存解决方案 【免费下载链接】VBrowser-Android 全网视频嗅探缓存APP 项目地址: https://gitcode.com/gh_mirrors/vb/VBrowser-Android 你是否曾在通勤路上因为网络信号差而无法观看喜欢的视频?是否因为流量不…

2026/7/7 0:42:44阅读更多 →
3种道路标线分类方案对比:传统几何特征 vs 模型匹配 vs 深度学习GAT_SCNet

3种道路标线分类方案对比:传统几何特征 vs 模型匹配 vs 深度学习GAT_SCNet

道路标线分类技术全景:从传统几何特征到深度学习GAT_SCNet的演进与选型指南道路标线识别技术正经历着从规则驱动到数据驱动的范式转变。随着自动驾驶和高精地图需求的爆发式增长,传统基于几何特征的方法已难以应对复杂场景下的标线识别挑战。本文将深入剖…

2026/7/7 0:37:44阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/6 2:48:33阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8…

2026/7/7 0:02:41阅读更多 →
国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-o…

2026/7/7 0:02:41阅读更多 →
CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…

2026/7/7 0:02:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →