服务安全之:JWT
2024-08-30 10:30:17
JWT是JSON Web Tokens的缩写。既然叫JSON Web Tokens,所以JWT Tokens中真正包含的是多个JSON对象。为什么是多个JSON对象呢?因为SWT Token实际上是由三部分组成,其中有两部分是JSON格式。这三部分即头(Header)、负载数据(Payload)、签名(Signature)。
1、信息头(Header)
头信息包含两部分,一部分表示Token的类型,对于JWT来说,值为JWT;另一部分表示签名算法,如,HMAC、SHA256、RSA。示例如下:
2、负载信息(Payload)
负载信息是对实体与附加信息的说明。包含注册声明、公开声明、私有声明三部分。详情请参考:https://tools.ietf.org/html/rfc7519#section-4.2
3、签名(Signature)
通过指定的算法将头、负载、密码信息作为输入条件,计算而得的一个字符串。
这三部分信息不是原文传输的。在传输以前,先要进行转码压缩。这样做一是为了使传输的token数据体积小,减少数据传输的负担,二是为了使数据更安全。JWT Token一般可以采用HMAC算法使用密码进行转码压缩,或采用RSA或ECDSA使用公钥/私钥对进行转码。这两种算法均具有数字签名的作用,从而能够保证数据的完整性,防止数据被第三方篡改。
JSON格式的头信息和负载信息一般先要进行Base64编码转化。然后通过以下的算法获得签名:
假定头信息Base64编码转化后的字符用h表示,Base64编码转化后的负载数据信息用p表示,签名值用s表示,则JWT Token显示为一串用逗号分隔的字符串,一般有如下的形式:
hhhhh.ppppp.sssss
JWT最常用的应用场景是为用户授权。用户在登录时,从授权服务器拿到JWT Token,后续的用户请求只要携带此Token请求相应的资源或服务即可。服务端会在拿到用户传的Token后,进行合法性验证。
JWT另一个用途就是进行信息交换。由于JWT Token既可以用于承载数据,又是经过签名的,所以,既可以包含更多的应用相关信息,又可以保证数据的安全性,防止数据被拦截后修改。
更详细的介绍,请参考官方说明:https://jwt.io/introduction/
最新文章
- c#保留小数点后位数的方法
- 关于JavaScript闭包的小问题
- Java虚拟机JVM学习04 类的初始化
- linux环境进程的停止
- iOS开发笔记--宏定义的黑魔法 - 宏菜鸟起飞手册
- python-django如何在sae中使用自带ImageField和FileField -django-上善若水小站
- Node.js学习之TCP/IP数据通讯
- 【MyBatis源码分析】Configuration加载(下篇)
- 从Mybatis源码理解jdk动态代理默认调用invoke方法
- selenium3 调用IE Unable to get browser
- vue全局后置钩子afterEach
- 搭建GitLab服务器
- 02-04:springboot 访问静态资源
- dom4j+XPath
- RabbitMQ学习以及与Spring的集成(三)
- [java ] java.util.zip.ZipException: error in opening zip file
- CTE的妙用
- ThreadLocal系列(一)-ThreadLocal的使用及原理解析
- 你真的了解Fragment的生命周期吗?
- 封装一个jquery库
热门文章
- python下selenium模拟浏览器基础操作
- R_Studio(神经网络)BP神经网络算法预测销量的高低
- php的while函数
- 12.并发编程--Queue
- nginx 与location语法详解
- 记一次elastic-job使用
- 一、linux下nginx1.7.8+php5.6.3的环境配置
- In an ASP.NET website with a codebehind at what point are the .cs files compiled?
- note: Spanner: Google’s Globally-Distributed Database
- 源码编译apache报错的解决方法