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.hqwc.cn/news/618439.html

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

相关文章

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

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

物联网:门锁RNBN-K18使用记录

摘要&#xff1a;对 RNBN品牌下 K18智能门锁日常使用操作经验记录。 常见问题&#xff1a; 1.门锁联网时&#xff0c;找不到 wifi 怎么办。 答&#xff1a;检查一下几个方面&#xff1a;1. wifi 信号是否是2.4G&#xff0c;2.wifi信号是否距离没锁很远。因为门锁只能获取到2…

python应用-os库操作目录

python自带的os模块提供了许多与操作系统交互的函数&#xff0c;适配多种操作系统&#xff0c;比如windows&#xff0c;mac&#xff0c;linux等&#xff0c;比如常用路径操作、进程管理、环境参数等都可通过os模块实现。 以下是自带的os.py中的前面一部分代码。 第一个红框中主…

Flutter第八弹 构建拥有不同项的列表

目标&#xff1a;1&#xff09;项目中&#xff0c;数据源可能涉及不同的模版&#xff0c;显示不同类型的子项&#xff0c;类似RecycleView的itemType, 有多种类型&#xff0c;列表怎么显示&#xff1f; 2&#xff09;不同的数据源构建列表 一、创建不同的数据源 采用类似Rec…

C++ | Leetcode C++题解之第27题移除元素

题目&#xff1a; 题解&#xff1a; class Solution { public:int removeElement(vector<int>& nums, int val) {int left 0, right nums.size();while (left < right) {if (nums[left] val) {nums[left] nums[right - 1];right--;} else {left;}}return lef…

minikube环境搭建

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列、spring教程等&#xff0c;大家有兴趣的可以看一看 &#x1f4d9;Jav…

深度学习学习日记4.14 数据增强 Unet网络部分

数据增强 transforms.Compose([&#xff1a;这表示创建一个转换组合&#xff0c;将多个数据转换操作串联在一起 transforms.RandomHorizontalFlip()&#xff1a;这个操作是随机水平翻转图像&#xff0c;以增加数据的多样性。它以一定的概率随机地水平翻转输入的图像。 transfo…

【云计算】云数据中心网络(二):弹性公网 IP

云数据中心网络&#xff08;二&#xff09;&#xff1a;弹性公网 IP 1.什么是弹性公网 IP2.弹性公网 IP 的类型2.1 多线 EIP2.2 任播 EIP2.3 单线静态 EIP2.4 精品 EIP2.5 识别不同类型的 IP 的地址 3.弹性公网 IP 功能3.1 自带公网 IP 地址上云3.2 尽力找回公网 IP 地址3.3 连…

发布 Chrome/Edge浏览器extension扩展到应用商店

Chrom Extension发布流程 创建和发布自定义 Chrome 应用和扩展程序&#xff1a;https://support.google.com/chrome/a/answer/2714278?hlzh-Hans 在 Chrome 应用商店中发布&#xff1a;https://developer.chrome.com/docs/webstore/publish?hlzh-cn 注册开发者帐号&#…

有真的副业推荐吗?

#有真的副业推荐吗# 我做副业项目的时候&#xff0c;认识了一位带娃宝妈&#xff0c;讲一下她空闲时间做副业赚钱的故事吧。在一个温馨的小家庭里&#xff0c;李婷是一位全职宝妈&#xff0c;她的主要任务是照顾和陪伴自己可爱的宝宝。然而&#xff0c;随着宝宝逐渐长大&#x…

【vs2019】window10环境变量设置

【vs2019】window10环境变量设置 【先赞后看养成习惯】求关注点赞收藏&#x1f60a; 安装VS2019时建议默认安装地址&#xff0c;最好不要改动&#xff0c;不然容易出问题 以下是安装完VS2019后环境变量的设置情况&#xff0c;C:\Program Files (x86)\Microsoft Visual Studi…

稀碎从零算法笔记Day48-LeetCode:三角形最小路径和

题型&#xff1a;DP、二维DP、矩阵 链接&#xff1a;120. 三角形最小路径和 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给定一个三角形 triangle &#xff0c;找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的…