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

image

前言

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(重点看注释

    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 的签名,并解析其中的信息,从而完成身份验证过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/309107.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab 安装 mingw64(6.3.0),OPENEXR

matlab安装openexr 1. matlab版本与对应的mingw版本选择2. mingw&#xff08;6.3.0&#xff09;下载地址&#xff1a;3. matlab2020a配置mingw&#xff08;6.3.0&#xff09;流程“4. matlab 安装openexr方法一&#xff1a;更新matlab版本方法二&#xff1a;其他博文方法方法三…

MySQL——链表

主键&#xff1a;非空 唯一&#xff08;针对整列数据而言&#xff09; 为了方便管理一般主键都是设置为自增 外键&#xff1a;一张表中的一列的值是另一张表的主键&#xff0c;使用外键建立两张数据表的数据关系 一、两张表连接 将两张表格拼接成一个表 1、格式&#xff1a;s…

爬虫 | 网易新闻热点数据的获取与保存

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本项目是一个简单的网络爬虫&#xff0c;用于从网易新闻的热点新闻列表中提取标题和对应的链接&#xff0c;并将提取到的数据保存到一个 CSV 文件中。 目录 一、技术栈 二、功能说明 三、注意事项 四、代码解析 1. 导入所需…

【C++进阶】RAII思想&智能指针

智能指针 一&#xff0c;为什么要用智能指针&#xff08;内存泄漏问题&#xff09;内存泄漏 二&#xff0c;智能指针的原理2.1 RAII思想2.2 C智能指针发展历史 三&#xff0c;更靠谱的shared_ptr3.1 引用计数3.2 循环引用3.3 定制删除器 四&#xff0c;总结 上一节我们在讲抛异…

PostgreSQL入门到实战-第二十九弹

PostgreSQL入门到实战 PostgreSQL中数据分组操作(四)官网地址PostgreSQL概述PostgreSQL中CUBE命令理论PostgreSQL中CUBE命令实战更新计划 PostgreSQL中数据分组操作(四) 如何使用PostgreSQL CUBE生成多个分组集 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不…

InternlM2

第一次作业 基础作业 进阶作业 1. hugging face下载 2. 部署 首先&#xff0c;从github上git clone仓库 https://github.com/InternLM/InternLM-XComposer.git然后里面的指引安装环境

【Golang学习笔记】从零开始搭建一个Web框架(二)

文章目录 模块化路由前缀树路由 前情提示&#xff1a; 【Golang学习笔记】从零开始搭建一个Web框架&#xff08;一&#xff09;-CSDN博客 模块化路由 路由在kilon.go文件中导致路由和引擎交织在一起&#xff0c;如果要实现路由功能的拓展增强&#xff0c;那将会非常麻烦&…

[尚硅谷flink] 检查点笔记

在Flink中&#xff0c;有一套完整的容错机制来保证故障后的恢复&#xff0c;其中最重要的就是检查点。 文章目录 11.1 检查点11.1.1 检查点的保存1&#xff09;周期性的触发保存2&#xff09;保存的时间点3&#xff09;保存的具体流程 11.1.2 从检查点恢复状态11.1.3 检查点算法…

【python】 numpy 中常用随机数函数的使用和记忆(不易混淆)

文章目录 概述固定分布随机数&#xff08;只需指定形状的随机函数&#xff09;np.random.randomnp.random.randnp.random.randn 随机范围随机数&#xff08;需要指定范围和形状的随机函数&#xff09;np.random.randintnp.random.uniformnp.random.normalnp.random.poisson 代码…

乐写9612手写板实测故障

闲鱼上淘了二手的 ①需要驱动很强的usb口&#xff0c;老usb口会不识别&#xff0c;尤其是笔记本容易不识别&#xff0c;非常容易出现下面这种问题&#xff1a; ②需要microsoft2013以上的&#xff0c;兼容性做的比较差 ③由于可视化&#xff0c;导致数据线容易烧&#xff0c;…

超标量处理器设计:基于竞争的分支预测分支预测的更新

★ 继续学习体系结构的知识。 接着上一讲继续写 ★上一讲&#xff1a;超标量处理器设计&#xff1a;基于全局历史的分支预测-CSDN博客 ★上上一讲&#xff1a;超标量处理器设计&#xff1a;两位饱和计数器&基于局部历史的分支预测-CSDN博客 知识回顾&#xff1a; 基于局部…

策略模式【行为模式C++】

1.概述 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 策略模式通常应用于需要多种算法进行操作的场景&#xff0c;如排序、搜索、数据压缩等。在这些情况下&#x…

将公式用MathType转换导入LaTex的方法 Mathtype+laTex 混合使用 在mathtype中打latex代码编辑公式

关于LaTex和Word之间孰优孰劣的争论已经持续了很长时间&#xff0c;有些朋友在写论文时还会纠结是用Word好还是用LaTex好&#xff0c;其实他们两也是各有优势&#xff0c;LaTeX 与 Word 是两种不同类型的文本编辑处理系统。Latex是无格式的明文文档&#xff0c;格式保存在源文件…

dbeaver数据库语言编辑器设置jdbc驱动

打开 dbeaver 软件 数据库 -> 驱动管理器 以mysql为例 双击 MySQL -> 库 -> 添加工件 然后 打开maven组件库 官网 找到mysql驱动对应的maven工件地址 复制进去然后确认就行了 参考 大神博客

stm32f103c8t6hal库使用看门狗

STM32F103C8T6是一款性能强大的微控制器&#xff0c;它具有丰富的外设和功能&#xff0c;其中之一就是看门狗&#xff08;Watchdog&#xff09;。看门狗是一种重要的硬件设备&#xff0c;它可以在系统出现异常时自动重启系统&#xff0c;以保证系统的稳定运行。我们将详细介绍如…

001vscode为什么设置不了中文?

VSCode中文插件安装 在VSCode中设置中文的首要步骤是安装“Chinese (Simplified) Language Pack for Visual Studio Code”扩展插件。这一过程十分简单&#xff0c;只需打开VSCode&#xff0c;进入扩展市场&#xff0c;搜索“ Chinese (Simplified) Language Pack ”然后点击…

transformer

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个transformer模型pytorch程序,最后打印5个条件分别的影响力。 示例一 为了计算每个条件对一件事情发生的影响力&am…

会声会影2024全新视频剪辑软件

会声会影 (CyberLink PowerDirector) 是一款既强大又易于使用的视频编辑软件&#xff0c;具有众多功能和工具&#xff0c;专为用户设计制作高质量的视频剪辑和制作。无论您是一个新手或是一个有经验的电影制作者&#xff0c;会声会影都适合您的需要。 生活即电影 软件下载地址&…

JAVA面试八股文之数据库

MySQL面试题 MySQL 存储引擎架构了解吗&#xff1f;CHAR 和 VARCHAR 的区别是什么&#xff1f;索引是越多越好嘛&#xff1f;MySQL数据库中空值&#xff08;null&#xff09;和空字符串&#xff08;&#xff09;的区别&#xff1f;SQL 中 on 条件与 where 条件的区别&#xff1…

【设计模式】六大设计原则

设计原则 研究 23 种设计模式是困难的&#xff0c;甚至是没必要的六大设计原则零、单一职责原则开闭原则里氏代换原则依赖倒置原则接口隔离原则迪米特法则合成复用原则 研究 23 种设计模式是困难的&#xff0c;甚至是没必要的 设计模式有23种&#xff0c;我认为对普通人来说想…