ASP.NET Core 标识(Identity)框架系列(二):使用标识(Identity)框架生成 JWT Token

前言

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络上以 JSON 对象的形式安全地传输信息。

JWT 通常用于在用户和服务器之间传递身份验证信息,以便在用户进行跨域访问时进行身份验证。

JWT 由三部分组成,它们用点号(.)连接在一起,形成一个紧凑的字符串。

这三部分分别是:

  1. Header(头部):包含了描述 JWT 的元数据,例如令牌的类型(即JWT),以及所使用的签名算法等信息。

  2. Payload(载荷):包含了有关用户或其他实体的信息,以及其他元数据。Payload 可以包含称为 "声明" 的键值对,用于描述实体的一些属性。声明分为注册声明、公共声明和私有声明。

  3. Signature(签名):使用头部中指定的算法对头部和载荷进行签名,以确保数据的完整性和验证发送方的身份。签名是由编码后的头部、编码后的载荷、密钥和指定的算法生成的。

JWT 具有很多优点,例如很方便在不同的域之间进行身份验证、减少服务器端的存储压力、以及支持跨语言和跨平台使用等等。

通过本文,可以详细了解如何利用 ASP.NET Core 标识(Identity)框架生成 JWT Token。

Step By Step 步骤

  1. 创建一个 .Net Core Console 项目

  2. 引用以下 Nuget 包:

    System.IdentityModel.Tokens.Jwt

  3. 打开 Program.cs 文件,生成 JWT token(重点看注释

    c# 复制代码
    using Microsoft.IdentityModel.Tokens;
    using System.IdentityModel.Tokens.Jwt;
    using System.Security.Claims;
    using System.Text;
    
    // Claim代表用户信息
    // 一个Claim就代表一条用户信息
    // Claim有两个主要的属性:Type 和 Value
    // 它们都是 string 类型的,Type 代表用户信息的类型,Value 代表用户信息的值
    // Type可以取任意值
    // 不过,一般 Type 的值都取自 ClaimTypes 类中的成员
    // 好处是可以更方便地与其他系统对接
    // 下面代码创建了5个Claim对象
    var claims = new List<Claim>();
    claims.Add(new Claim(ClaimTypes.NameIdentifier, "6"));
    claims.Add(new Claim(ClaimTypes.Name, "yzk"));
    claims.Add(new Claim(ClaimTypes.Role, "User"));
    claims.Add(new Claim(ClaimTypes.Role, "Admin"));
    claims.Add(new Claim("PassPort", "E90000082")); //自定义的PassPort为E90000082的用户护照信息
    
    // 对 JWT 进行签名的密钥
    string key = "fasdfad&9045dafz222#fadpio@0232";
    
    // 设置令牌的过期时间
    DateTime expires = DateTime.Now.AddDays(1);
    
    / /根据过期时间、多个 Claim 对象、密钥来生成 JWT
    byte[] secBytes = Encoding.UTF8.GetBytes(key);
    var secKey = new SymmetricSecurityKey(secBytes);
    var credentials = new SigningCredentials(secKey, SecurityAlgorithms.HmacSha256Signature); //算法
    var tokenDescriptor = new JwtSecurityToken(claims: claims, expires: expires, signingCredentials: credentials);
    string jwt = new JwtSecurityTokenHandler().WriteToken(tokenDescriptor);
    
    Console.WriteLine(jwt);
  4. 运行项目,将在命令窗口中打印出代码生成的 JWT Token,通过这个 Token,就可以应用在身份验证等场合。

写在最后

JWT 具有很多优点,当然,使用时也要注意安全性,正确地设置过期时间、避免在 JWT 中存储敏感信息等。

JWT 的工作流程通常如下:

  • 首先客户端请求时提供身份验证信息(例如用户名和密码)
  • 服务器接收请求后,验证信息并确认无误生成一个 JWT,将其作为响应的一部分发送回客户端
  • 客户端在随后的请求中将 JWT 包含在请求头中
  • 服务器验证 JWT 的签名,并解析其中的信息,从而完成身份验证过程
相关推荐
ejjdhdjdjdjdjjsl1 小时前
深入理解C#泛型:从方法到约束
c#
bugcome_com2 小时前
WPF 核心布局控件全解析:从 Grid 到 UniformGrid 的实战应用
c#·wpf
wangnaisheng2 小时前
Intel IPP 图像处理相关函数
c++·c#·图像
阿蒙Amon3 小时前
C#每日面试题-简述可空类型
microsoft·面试·c#
huluang3 小时前
高性能Word文档批注处理器的设计与实现
开发语言·c#·word
Wpa.wk3 小时前
接口测试-Postman接口测试小练习-初级
经验分享·测试工具·接口测试·postman
历程里程碑4 小时前
破解三数之和:双指针高效解法
c语言·数据结构·c++·经验分享·算法·leetcode·排序算法
Lv11770084 小时前
Visual Studio中的try -- catch
ide·笔记·c#·visual studio
先生沉默先4 小时前
串口通信学习,使用winform读取串口发送数据,(2)
学习·c#·串口
kylezhao20194 小时前
C#上位机开发数据持久化:xml数据导入导出
xml·开发语言·c#