| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 什么是JWT? -> 正文阅读 |
|
[网络协议]什么是JWT? |
JWTJSON Web Token (JWT) 是一个开源标准(RFC 7519),它定义了一种紧凑且自完备的方法用于在各参与方之间以JSON对象传递信息。以该种方式传递的信息已经被数字签名,因而可以被验证并且被信任。JWT既可以使用盐(secret)(HMAC算法)进行签名,也可以使用基于RSA/ECDSA算法的公钥/秘钥对进行签名。
应用场景
JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。 JWT结构在紧凑形式下,Json Web Token由以下三部分组成:
因此,一个典型的JWT形式如: Header典型的JWT header包含两个部分:(1) token类型,即JWT。(2) 所使用的签名算法,比如HMAC SHA256或者RSA。 例:
该JSON以Base64Url加密(可以被对称解密)后形成了JWT的第一部分:
PayloadJWT token的第二部分是包含了声明的payload,声明是一个实体的表述加上额外信息,一共有三种形式的声明:注册、共有和私有。
定义一个payload:
然后对其进行base64加密,得到JWT的第二部分:
SignatureJWT的第三部分是签名信息,Signature由三部分组成:
Signature需要将base64加密后的header和payload使用
Signature被用于验证信息在传输过程中没有被更改,或者在token以私钥加密的条件下,也可以验证JWT的发送者是否是其所自称的身份。 注:secret保存在服务端,jwt的签发也发生在服务端,secret即是用来进行jwt的签发和验证的。因为,它就是服务端的私钥,任何场景下都不应该被泄露出去。 如图是一个完整的jwt token示例: JWT如何工作?在认证(authentication)过程中,当用户使用凭据成功登录后,就会返回一个jwt token。因为jwt token是一种凭据,必须仔细关注其安全问题。一般而言,需要讲token的长度限制在需要的范围内。 也不应该在浏览器中存储敏感的session信息,因为这样缺乏安全。 每当用户希望访问一个被保护的路由或者资源,用户代理应当发送JWT,典型的用法是加上
在某些情况下,这是一种无状态授权方式。服务器的受保护路由会检查 注:如果采用HTTP headers发生jwt token,应该避免它的体积变得很大。一些服务器不接收大于8KB的header。如果你一定要在一个jwt token中嵌入大量信息,例如包含用户全部的授权信息,你可能需要其他解决方案,比如: Auth0 Fine-Grained Authorization 如果token使用 下图展示了一个JWT token被获取并被用于访问API或者资源的过程:
为什么要使用JWT?基于cookie的认证,存在如下问题:
基于session的认证,存在如下问题:
JWT是一种基于token的认证机制,它类似于HTTP协议一样是无状态的,不需要在服务端保留用户的认证信息或者会话信息。除此之外,基于token的鉴权机制不需要考虑用户在哪一台服务器登录,为应用扩展提供了便利。 接下来我们对比一下JWT和SWT(Simple Web Token)以及Security Assertion Markup Language Tokens (SAML),两者都是基于token的鉴权机制。 由于JSON没有XML那么冗余,被编码时体积也更小,因而JWT比SAML更紧凑。这使得JWT成为一个在HTML和HTTP环境下传递信息的最佳选择。 安全方面,SWT仅能被共享盐(shared secret)对称加密,但是JWT和SAML能被公钥/私钥对已 在众多编程语言中JSON解析器都是常见的,因为可以直接映射对象。相反,XML则没有一个自然的文档to对象映射。这使得JWT比SAML断言使用起来更加简单。 应用方面,JWT已经在互联网层面广泛应用。JSON Web token在众多平台上客户端侧的简单处理尤为出彩,尤其是移动端。 再补充一些jwt的优点:
安全相关安全方面应该注意的点:
参考文献 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 6:52:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |