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

这篇具有很好参考价值的文章主要介绍了【C#】.Net Framework框架使用JWT。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

【C#】.Net Framework框架使用JWT,c#,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字符串。你还可以根据需要添加其他声明,设置过期时间和其他参数。文章来源地址https://www.toymoban.com/news/detail-615521.html

到了这里,关于【C#】.Net Framework框架使用JWT的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ASP.NET Core使用JWT+标识框架(identity)实现登录验证

    最近阅读了《ASP.NET Core 技术内幕与项目实战——基于DDD与前后端分离》(作者杨中科)的第八章,对于Core入门的我来说体会颇深,整理相关笔记。 JWT:全称“JSON web toke”,目前流行的跨域身份验证解决方案; 标识框架(identity):由ASP.NET Core提供的框架,它采用RBAC(role

    2024年02月11日
    浏览(39)
  • 【C# .NET 】使用 Entity Framework Core 操作sqlite数据库

    添加包 EF Core design package   NuGet Gallery | Home 使用用于 EF Core 迁移和现有数据库中的反向工程(基架)的工具需要安装相应的工具包: 可在 Visual Studio 包管理器控制台中使用的 PowerShell 工具的 Microsoft.EntityFrameworkCore.Tools 跨平台命令行工具的 dotnet-ef 和 Microsoft.EntityFramewor

    2024年02月14日
    浏览(46)
  • 切换.net Framework 版本后,出现NuGet 包是使用不同于当前目标框架的目标框架安装的,可能需要重新安装

    由于添加新的dll文件,依赖的.NET Framework版本与当前的不一致,在vs 中切换了目标框架版本后,运行程序,出现以下的warnning信息: 一些 NuGet 包是使用不同于当前目标框架的目标框架安装的,可能需要重新安装。有关详细信息,请访问 https://docs.nuget.org/docs/workflows/reinstalling

    2024年02月16日
    浏览(40)
  • C#和.NET FrameWork概述

    .NET FrameWork是由微软开发的一种面相对象的环境框架,特点如下: ①多平台:可在各种计算机、服务器、手机上运行。 ②标准化通讯协议:如XML、HTTP、JSON等。 ③安全性:CLR检查并确保参数及数据对象的类型安全。 ④简化部署:.NET程序不需要使用注册表注册 和 允许不同D

    2024年02月09日
    浏览(32)
  • C#核心笔记——(一)C#和.NET Framework

    C#是一种通用的,类型安全的面向对象编程语言。其目标是提高程序员生产力。 C#实现了丰富的面向对象范式,包括封装、继承、多态。 C#面向对象特性包括: 统一的类型系统 类与接口 属性、方法、事件 C#支持纯函数模式 C#是一门类型安全的语言。例如:C#不允许将字符串类

    2024年02月08日
    浏览(50)
  • 解决Unity游戏开发使用Visual Studio Enterprise 2022提示未找到目标框架.net framework4.7.1问题

    采用Visual Studio Installer安装Visual Studio Enterprise 2022,安装中勾选游戏下Unity游戏开发。 单个组件中确保勾选.NET Framework 4.7.1目标包 安装位置自定义修改至F盘后使用Visual Studio Enterprise 2022登录,在Unity设置使用Visual Studio Enterprise 2022并打开对应项目文件,提示未找到目标框架.net

    2024年02月10日
    浏览(49)
  • ASP.NET Website 项目 .NET Framework 4.0 ~ .NET Framework 4.8支持c#哪些版本(Website)

    本文讲的是Website网站项目,由于维护老项目Website .net framework4.0,遇到c#6.0语法不支持。便做了点记录 下面是关于 ASP.NET Website 项目在不同版本的 .NET Framework 下支持的 C# 版本的总结: ASP.NET Website 项目在 .NET Framework 4.0 中,默认使用 C# 4.0 版本。该版本不支持 C# 6.0 及更高版本

    2024年02月16日
    浏览(31)
  • .Net FrameWork 框架下使用System.Net.Mail封装类 发送邮件失败:服务器响应:5.7.1 Client was not authenticated 解决方案

    偶然兴起,想做一个后台监控PLC状态的服务。功能如下:监控到PLC状态值异常后触发邮件推送,状态改变后只推送一次。开始使用的是.net6.0开发框架开发,一切都很顺利,邮件也能正常推送。但由于现场工控机系统不是WIN10 20H2的最新版本,导致系统未安装.Net6.0 Runtime。而我

    2024年02月03日
    浏览(39)
  • C#安装“Windows 窗体应用(.NET Framework)”

    目录 背景: 第一步: 第二步: 第三步: 总结: 如下图所示:在Visual Studio Installer创建新项目的时候,想要添加windows窗体应用程序,发现里面并没有找到Windows窗体应用(.NET Framework)模板,快捷搜索也没有发现,那么为什么没有找到这个模板,可能程序未曾安装这个模板,那接下来就

    2024年02月10日
    浏览(33)
  • C# 利用.NET 升级助手将.NET Framework项目升级为.NET 6

    .NET6 正式版本已经发布有一阵子了,今天我就体验一下如何将.NET Framework的项目升级为.NET 6. 升级条件: Windows 操作系统 .NET 6 SDK Visual Studio 2022 17.0 或更高版本 ①首先是VS2022下载,直接上微软官方网站,下载地址: https://visualstudio.microsoft.com/zh-hans/downloads/ 下载后,在线安装就

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包