学习ASP.NET Core的身份认证(基于JwtBearer的身份认证2)

embedded/2024/12/24 3:53:23/

  根据参考文献8中的介绍,JWT Token主要分为3个部分:
  1)标题(Header):主要记录令牌类型、签名算法(加密算法)类型,格式为Json字符串,然后使用Base64编码字符串;
  2)有效负载(Payload):包括账号、姓名、颁发者等信息的声明集合,格式为Json字符串,然后使用Base64编码字符串。该部分为Token的关键内容,从中可以获取所用用户账号信息,但由于仅用Base64处理,没有什么安全性可言,最好不要在其中放置密码等敏感数据。参考文档8中将声明信息分为3类:已注册声明(参考文献10)、公共声明(参考文献9)、自定义声明(约定好的、在各个系统之间传递的数据);
  3)签名(Signature):该部分内容的产生方式是用标题中指定的加密算法,使用密钥对标题和有效负载加密或签名(如下图所示)。签名部分的数据起到防篡改的作用,只要密钥未泄露,接收JWT Token的一方根据标题和有效负载,使用相同的算法及密钥应该也能生成相同的签名(非对称算法应该是完成验签),只要和Token中的签名一致即表明Token未被篡改,是可信的。

在这里插入图片描述
  分析参考文献1-7,生成JWT Token主要使用Claim、SigningCredentials、JwtSecurityToken和JwtSecurityTokenHandler类:
  1)Claim:与之前基于Cookie、Session认证中的声明类一样,保存各类用户信息,Token中有效负载部分的主体内容即为Claim对象实例;
  2)SigningCredentials:加密类,该类的构造函数可以接收密钥及加密算法类型,以支持签名/验签操作;
  3)JwtSecurityToken:该类为Token的结构化数据类,如下图所示,通过该类可以设置Token中的有效负载、加密方式、过期时间等数据;
在这里插入图片描述
  4)JwtSecurityTokenHandler:该类的WriteToken函数基于JwtSecurityToken实例生成Token字符串。

  上一篇文章中的测试程序使用参考文献4的代码创建Token,将Token字符串放到参考文献8提供的Token解析页面,可以看到能正确的从Token中将标题和有效负载中的内容还原。
在这里插入图片描述
  找了个在线解析Base64字符串的页面,将Token中的有效负载内容解码,可以看到原始内容,因此最好不要在其中放置敏感内容,以防数据泄露。
在这里插入图片描述

参考文献:
[1]https://www.jianshu.com/p/a2804e72d296
[2]https://blog.csdn.net/sD7O95O/article/details/85043160
[3]https://www.cnblogs.com/qiongkangle/p/13347283.html
[4]https://www.cnblogs.com/xbhp/p/17401507.html
[5]https://www.cnblogs.com/superstar/p/16491428.html
[6]https://blog.csdn.net/weixin_44877917/article/details/140609294
[7]https://blog.csdn.net/qq_40287041/article/details/143368882
[8]https://jwt.io/introduction
[9]https://www.iana.org/assignments/jwt/jwt.xhtml
[10]https://tools.ietf.org/html/rfc7519#section-4.1


http://www.ppmy.cn/embedded/148240.html

相关文章

探索Linux中的Zombie僵死进程

文章目录 探索Linux中的Zombie僵死进程什么是Zombie僵死进程?僵死进程的产生原因如何识别僵死进程?如何清理僵死进程?僵死进程对系统的影响总结 探索Linux中的Zombie僵死进程 在Linux系统中,进程管理是一个非常重要的主题&#x…

Python发送带key的kafka消息

在Python中发送带有键(key)的Kafka消息,通常会使用confluent-kafka或kafka-python这样的库。这里我将分别展示如何使用这两个库来实现这个功能。 ### 使用 confluent-kafka 首先,确保你已经安装了confluent-kafka库。如果没有安装…

陪诊小程序搭建,打造一站式陪诊服务

当下,陪诊市场正在持续火热发展,在全国医疗行业中,陪诊师成为了一个重要的就医方式。陪诊师的出现在快节奏生活下显得尤为重要,为不少没有时间陪老人去医院的家庭以及对医院不熟悉的提供了便利,满足了众多患者及其家属…

梳理你的思路(从OOP到架构设计)_介绍GoF设计模式

目录 GoF的由来 GoF的种类 GoF的由来 裁缝有样式、围棋有棋谱、烹饪有食谱、武功有招式、战争有兵法, ..... 皆是专家和高手的经验心得,通称为:模式(Pattern)。模式告诉您理想的方案像什么、有那些特性﹔ 同时也告诉您些规则,让…

python实现基于RPC协议的接口自动化测试

01 什么是RPC RPC(Remote Procedure Call)远程过程调用协议是一个用于建立适当框架的协议。从本质上讲,它使一台机器上的程序能够调用另一台机器上的子程序,而不会意识到它是远程的。 RPC 是一种软件通信协议,一个程…

ubuntu22.04 nginx配置下载目录,亲测成功

安装nginx ubuntu最简单,apt安装即可 apt install nginx 配置文件 文件都在目录下 /etc/nginx/添加内容 修改/ etc/nginx/sites-available/default , 注意这里不是nginx.conf,直接修改nginx.conf不奏效 location /downloads { …

Docker快速安装Tomcat

安装docker的教程,参考文章: Linux安装Docker-CSDN博客 在linux中安装Tomcat,步骤如下: 1.从远程仓库中拉取Tomcat镜像 docker pull tomcat 如果拉取很慢,通过更换下载镜像的地址便可解决,不过镜像地址可能…

【集合】Java 8 - Stream API 17种常用操作与案例详解

文章目录 Java8 Stream API 17种常用操作与案例详解1. collect():将流中的元素收集到集合中2. filter():根据条件过滤流中的元素3. map():元素映射为另一个值4. forEach():对流中的元素执行操作5. flatMap():将流中的元…