当前位置: 首页 > news >正文

【C#】.Net Framework框架使用JWT

2023年,第31周,第2篇文章。给自己一个目标,然后坚持总会有收货,不信你试试!
本篇文章主要简单讲讲,.Net Framework框架下使用JWT的代码例子,以及他们的基本概念。
2002年微软发布了.net framework 1.0,那个时候博主刚开始玩传奇游戏,接触电脑的时间还是挺早的。

目录

  • 1、什么是JWT
  • 1.1、头部(Header)
  • 1.2、载荷(Payload)
  • 1.3、签名(Signature)
    • 1.4、JWT工作流程
    • 1.5、JWT优点
    • 1.6、JWT缺点
  • 2、Framework框架
    • 2.1、版本历时
  • 3、JWT代码实现
    • 3.1、引入库
    • 3.2、导入命名空间
  • 3.3、生成JWT代码
  • 3.4、验证JWT代码

在这里插入图片描述

1、什么是JWT

JWT(JSON Web Token)是一种开放的、自包含的标准,用于在网络应用间传输信息。
它基于JSON(JavaScript Object Notation)格式,并使用数字签名或加密来验证消息的完整性和真实性。

JWT由三个部分组成:头部(Header)、载荷(Payload)和签名(Signature)。

1.1、头部(Header)

包含描述JWT的元数据,例如所使用的加密算法和类型(通常是JWT)。

{"alg": "HS256","typ": "JWT"
}

1.2、载荷(Payload)

包含具体的数据,也可以添加自定义的声明(Claim),如用户名、角色、过期时间等。

{"sub": "1234567890","name": "John Doe","iat": 1516239022
}

1.3、签名(Signature)

由头部和载荷组成,并使用私钥(或对称密钥)进行签名,确保数据的完整性和真实性。

HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),secretKey
)

1.4、JWT工作流程

1)客户端提供有效的凭证(如用户名和密码)进行身份验证请求。
2)服务器进行身份验证,并返回带有有效签名的JWT给客户端。
3)客户端在后续请求中使用该JWT,通过解析和验证JWT,服务器可以确定请求的发起者身份和权限。

1.5、JWT优点

1)自包含性
JWT包含了身份验证和授权所需的所有信息,减轻了服务器存储状态的负担。
2)松散耦合
JWT可用于不同的平台和服务之间的身份验证和授权,具有良好的兼容性。
3)可扩展性
可以自定义声明来存储额外的数据。
4)安全性
JWT的签名可以确保数据的完整性和真实性。

1.6、JWT缺点

1)无法撤销
一旦 JWT 被签发,就无法撤销或使其失效,除非将密钥从客户端强制撤销或更改。因此,如果需要撤销令牌,JWT 不是一个合适的选择。
2)体积较大
JWT 包含了头部、载荷和签名,在网络传输中占用的空间相对较大。尽管可以对 JWT 进行压缩,但仍然比一些其他的验证机制更加臃肿。
3)敏感信息存储
JWT 默认存储在客户端,通常存储在浏览器的本地存储(如 LocalStorage 或 Cookie)中。这使得 JWT 脆弱,因为它容易受到 XSS 攻击的影响。因此,不建议将敏感信息存储在 JWT 的载荷中。

需要注意的是,由于JWT是基于Base64编码的,因此它并不是加密的。所以在使用JWT时,不要在其载荷中存储敏感信息,如密码或银行卡号等。

总结起来,JWT是一种轻量级、安全的身份验证和授权解决方案,其简单的结构和可扩展性使其成为当今Web应用程序中常用的身份验证标准之一。

2、Framework框架

2.1、版本历时

.NET Framework 是微软开发的一个应用程序开发框架,提供了开发和运行各种类型应用程序所需的库、工具和运行时环境。下面是.NET Framework 各个主要版本的历时情况:

编号版本发布时间备注
1.NET Framework 1.0发布于2002年2月这是最早的.NET Framework 版本,提供了基本的库和运行时环境,用于支持开发和运行应用程序。
2.NET Framework 1.1发布于2003年4月这个版本是对 .NET Framework 1.0 的升级,增加了一些新功能和修复了一些问题。
3.NET Framework 2.0发布于2005年11月这是一个重大的版本升级,引入了许多新的功能,如可编程的 Windows Forms 控件、提供可视化设计的 Web 服务、增强的数据访问和 XML 处理支持等。
4.NET Framework 3.0发布于2006年11月实际上,.NET Framework 3.0 并未引入新的运行时,而是在 .NET Framework 2.0 基础上添加了一组新的功能。
5.NET Framework 3.5发布于2007年11月这是对 .NET Framework 3.0 的升级,引入了一些新的特性和改进,如 LINQ (Language Integrated Query)、ABM (ASP.NET AJAX) 等。
6.NET Framework 4.0发布于2010年4月这是一个又一个重大版本升级,引入了大量的新功能和改进,如支持并行计算、新的编译器、Entity Framework 4.0、改进的 WCF 和 WPF 等。
7.NET Framework 4.5发布于2012年8月这是 .NET Framework 4.0 的升级版,引入了一些新的特性和改进,如异步编程模型 (async/await)、改进的 GC (垃圾回收器)、桌面应用程序的改进等。
8.NET Framework 4.6发布于2015年7月这是 .NET Framework 4.5 的升级版,引入了一些新的特性和改进,如 RyuJIT (即时编译器)、改进的 WPF、改进的 ASP.NET 等。
9.NET Framework 4.7发布于2017年4月这是 .NET Framework 4.6 的升级版,引入了一些新的特性和改进。
10.NET Framework 4.8发布于2019年4月这是 .NET Framework 4.7 的升级版,引入了一些新的特性和改进。

需要注意的是,自.NET Framework 4.5起,微软改变了发布策略,不再单独发布全新的框架版本,而是通过积累更新 (Cumulative Updates) 来提供新功能和改进,以确保开发者可以更加轻松地升级和迁移。

此外,需要注意的是,自 .NET Framework 4.8 起,微软正逐渐停止对传统的.NET Framework 的更新,并推荐开发者使用更加开放和跨平台的 “.NET” 系列产品,如 .NET Core 和 .NET 5+。

3、JWT代码实现

在C# .NET Framework中使用JWT(JSON Web Token)插件来处理身份验证和授权,
你可以使用提供JWT支持的第三方库,如System.IdentityModel.Tokens.Jwt
这个库是.NET Framework的一部分,可以用于创建和验证JWT。

下面使用System.IdentityModel.Tokens.Jwt库生成和验证JWT

3.1、引入库

首先,确保你的项目引用了System.IdentityModel.Tokens.Jwt库。

3.2、导入命名空间

导入所需的命名空间:

using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;

3.3、生成JWT代码

使用以下代码生成JWT:

// 设置JWT的密钥
string secretKey = "your_secret_key";
byte[] keyBytes = Encoding.UTF8.GetBytes(secretKey);
var securityKey = new SymmetricSecurityKey(keyBytes);// 创建JWT的签名凭证
var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);// 设置JWT的Claims
var claims = new[]
{new Claim(ClaimTypes.Name, "John Doe"),new Claim(ClaimTypes.Email, "john.doe@example.com"),// 添加其他需要的声明
};// 创建JWT的Token
var token = new JwtSecurityToken(issuer: "your_issuer",audience: "your_audience",claims: claims,expires: DateTime.Now.AddDays(1),signingCredentials: signingCredentials
);// 生成JWT字符串
var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);

3.4、验证JWT代码

使用以下代码验证JWT:

// 验证JWT的密钥
var tokenValidationParameters = new TokenValidationParameters
{ValidateIssuer = true,ValidateAudience = true,ValidateIssuerSigningKey = true,IssuerSigningKey = securityKey,ValidIssuer = "your_issuer",ValidAudience = "your_audience"
};// 验证JWT字符串
var claimsPrincipal = new JwtSecurityTokenHandler().ValidateToken(jwtToken, tokenValidationParameters, out _);

请注意,上述示例中的"your_secret_key"、"your_issuer"和"your_audience"是示例值,你需要根据实际情况替换为真实的值。

使用以上代码,你可以通过JwtSecurityTokenHandler类生成JWT字符串,并使用同样的类验证和解析JWT字符串。你还可以根据需要添加其他声明,设置过期时间和其他参数。

相关文章:

【C#】.Net Framework框架使用JWT

2023年,第31周,第2篇文章。给自己一个目标,然后坚持总会有收货,不信你试试! 本篇文章主要简单讲讲,.Net Framework框架下使用JWT的代码例子,以及他们的基本概念。 2002年微软发布了.net framewo…...

SQL高级教程第三章

SQL CREATE DATABASE 语句 CREATE DATABASE 语句 CREATE DATABASE 用于创建数据库。 SQL CREATE DATABASE 语法 CREATE DATABASE database_name SQL CREATE DATABASE 实例 现在我们希望创建一个名为 "my_db" 的数据库。 我们使用下面的 CREATE DATABASE 语句&…...

vue 3.0 下载本地pdf文件

使用a标签,把pdf文件放到public文件夹下面 <el-form label-width"160px"> <el-form-item label"使用手册"> <div class"form-item-static"> <a href"/使用手册.pdf" target"_blank" class"link&q…...

平板用的触控笔什么牌子好?ipad第三方电容笔推荐

随着技术的发展&#xff0c;出现了各种各样的平板电容笔。一支好的电容笔&#xff0c;不但可以极大地提升我们的工作效率&#xff0c;还可以极大地提升我们的学习效果。平替的电容笔&#xff0c;无论是在技术方面&#xff0c;还是在质量方面&#xff0c;都还有很大的提升空间&a…...

【Unity2D】相机移动以及设置相机边界

添加相机 添加相机时&#xff0c;首先需要在unity中添加 Cinemachine 包 第一次使用这个包时&#xff0c;需要在Package Manager中搜索并安装 安装Camera Mechine包后&#xff0c;添加2D Camera 设置跟随对象为Ruby &#xff08;从Hierarchy中将Ruby拖动到Follow中&#xff0…...

和chatgpt学架构04-路由开发

目录 1 什么是路由2 如何设置路由2.1 安装依赖2.2 创建路由文件2.3 创建首页2.4 编写HomePage2.5 更新路由配置2.6 让路由生效 3 测试总结 要想使用vue实现页面的灵活跳转&#xff0c;其中路由配置是必不可少的&#xff0c;我们在做开发的时候&#xff0c;先需要了解知识点&…...

Spring MVC异常处理【单个控制异常处理器、全局异常处理器、自定义异常处理器】

目录 一、单个控制器异常处理 1.1 控制器方法 1.2 编写出错页面 1.3 测试结果 二、全局异常处理 2.1 一个有异常的控制器类 2.2 全局异常处理器类 2.3 测试结果 三、自定义异常处理器 3.1 自定义异常处理器 3.2 测试结果 往期专栏&文章相关导读 1. Maven系列…...

使用3ds Max粒子系统创建飞天箭雨特效场景

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 设置箭头 步骤 1 打开 3ds Max。 打开 3ds Max 步骤 2 我使用多边形建模技术制作了一个简单的箭头&#xff0c;我将 在教程中使用。.max您可以从 下载部分。 箭头.max 步骤 3 将此箭头重命名为静态…...

【朴素贝叶斯实例】

朴素贝叶斯对新闻进行分类 朴素贝叶斯算法是一种常用的文本分类方法&#xff0c;特别适用于自然语言处理任务&#xff0c;如新闻分类。在这篇博客中&#xff0c;我们将使用Python的scikit-learn库来实现朴素贝叶斯算法&#xff0c;并将其应用于新闻分类任务。 数据准备 首先…...

MPAS跨尺度、可变分辨率模式

跨尺度预测模式&#xff08;The Model for Prediction Across Scales - MPAS&#xff09;是由洛斯阿拉莫斯实验室和美国国家大气研究中心(NCAR)共同开发&#xff0c;其由3个部分组成&#xff0c;分别称为 MPAS-A&#xff08;大气模型&#xff09;、MPAS-O&#xff08;海洋模型&…...

微信小程序对接SSE接口记录

微信小程序对接SSE接口记录 需求&#xff1a;公司项目对接gpt&#xff0c;gpt产生的结果是分段返回&#xff0c;所以要求在产生结果时&#xff0c;有打字机的效果。原本是由定时器调用&#xff0c;后来优化改为服务端使用SSE接口。小程序使用起来比较方便&#xff0c;但是要求…...

Ngrok 的绝佳替代品,内网穿透神器 Serveo

什么是 Serveo Serveo 是一个免费的内网穿透服务&#xff0c;Serveo 可以将本地计算机暴露在互联网上&#xff0c;官方声称其为 Ngrok 的绝佳替代品。 Serveo 其最大优点是使用现有的 SSH 客户端&#xff0c;无需安装任何客户端软件即可完成端口转发。 Serveo 工作原理很简单…...

网络知识点之-路由

路由&#xff08;routing&#xff09;是指分组从源到目的地时&#xff0c;决定端到端路径的网络范围的进程。路由工作在OSI参考模型第三层——网络层的数据包转发设备。路由器通过转发数据包来实现网络互连。虽然路由器可以支持多种协议&#xff08;如TCP/IP、IPX/SPX、AppleTa…...

input 框如何移动光标,设置光标位置?

获取 input 光标位置 const inputDom document.getElementById("input") const selectionStart inputDom.selectionStart设置 input 光标 inputDom.focus() // focus() 异步&#xff0c;所以加了 setTimeout setTimeout(() > {const nextSelection selection…...

linux内核系统调用学习5:SYSCALL_DEFINE<0-6>

系统调用最大参数是6&#xff0c;由下面这个宏定义&#xff0c;位于文件include\linux\syscalls.h #define SYSCALL_DEFINE_MAXARGS 6 SYSCALL_DEFINE0(fork) fork&#xff1a;系统调用名。 SYSCALL_DEFINE1(set_tid_address, int __user *, tidptr) set_tid_address&#x…...

maven镜像仓库配置(多镜像自动切换)

大家在使用IDEA的时候会遇到这样的一个问题&#xff0c;就是在下载源代码和资源文档的时候&#xff0c;有些镜像仓库里面没有源代码和资源文档&#xff0c;然后会导致下载失败。 这时候就需要多个镜像仓库的地址了。 附上我自己的配置文件&#xff1a; <mirrors><!--…...

ChatGPT在智能监控和安防系统中的应用如何?

ChatGPT在智能监控和安防系统中有着广泛的应用潜力。智能监控和安防系统是利用人工智能和计算机视觉技术来实现对环境的实时监控和安全保障的系统。ChatGPT作为一种通用的预训练语言模型&#xff0c;可以在智能监控和安防系统中发挥以下作用&#xff1a; 1. **智能视频监控**&…...

【Spring Boot Admin】介绍以及使用

介绍 概述 Spring Boot Admin是一个监控工具&#xff0c;旨在以一种漂亮且易于访问的方式可视化Spring Boot Actuators提供的信息。 主要功能点 显示应用程序的监控状态应用程序上下线监控查看 JVM&#xff0c;线程信息可视化的查看日志以及下载日志文件动态切换日志级别Http…...

本地私有仓库部署、docker--harbor私有仓库部署和管理

部署本地私有仓库 拉取镜像 修改daemon.json配置文件 重启docker服务 创建容器 为镜像打标签 上传镜像 查看私有仓库 其他主机拉取私有仓库镜像 Docker--harbor私有仓库 &#xff08;1&#xff09;什么是Harbor Harbor 是 VMware 公司开源的企业级 Docker Registry 项目…...

java根据模板导出word

java根据模板导出word 日常开发中&#xff0c;常常会遇到各种各样的表格进行导出&#xff0c;比较好的办法就是提前弄好word模版&#xff0c;再通过遍历的方式进行导出文档 1、制作word模版 模版编写 内容替换 目标下面模版进行多页展示 将word转换成xml 将xml格式化 再将x…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...