Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
基于session认证所显露的问题
Session: 每个用户经过我们的应用认证之后,我们的应用都要在服务端做一次记录,以方便用户下次请求的鉴别,通常而言session都是保存在内存中,而随着认证用户的增多,服务端的开销会明显增大。
扩展性: 用户认证之后,服务端做认证记录,如果认证的记录被保存在内存中的话,这意味着用户下次请求还必须要请求在这台服务器上,这样才能拿到授权的资源,这样在分布式的应用上,相应的限制了负载均衡器的能力。这也意味着限制了应用的扩展能力。
CSRF: 因为是基于cookie来进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。
基于token的鉴权机制
基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。
流程上是这样的:
1)用户使用用户名密码来请求服务器
2)服务器进行验证用户的信息
3)服务器通过验证发送给用户一个token
4)客户端存储token,并在每次请求时附送上这个token值
JWT是由三段信息构成的,将这三段信息文本用.链接一起就构成了Jwt字符串。
JWT的构成
第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(signature).
header
jwt的头部承载两部分信息:
声明类型,这里是jwt
声明加密的算法 通常直接使用 HMAC SHA256
playload
载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分
标准中注册的声明
公共的声明
私有的声明
标准中注册的声明 (建议但不强制使用) :
iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
公共的声明 :
公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,因为该部分在客户端可解密.
私有的声明 :
私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。
signature
jwt的第三部分是一个签证信息,这个签证信息由三部分组成:
header (base64后的)
payload (base64后的)
secret
这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。
相关推荐
JWT介绍和实践,带demo。
17 JWT介绍.mp4
JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。 基于session的登录认证 在传统的用户登录认证中,因为http是无状态的,所以都是...
一:JWT介绍:全称JSON Web Token,基于JSON的开放标准((RFC 7519) ,以token的方式代替传统的Cookie-Session模式,用于各服务器、客户端传递信息签名验证。 二:JWT优点: 1:服务端不需要保存传统会话信息,没有...
介绍 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份...
Jwt 帮助文档,有详情的介绍,如何使用jwt,欢迎大家下载
在终章笔记中主要介绍一下JWT以及总结Cookie到JWT的区别与发展,包括JWT的定义,特点,重要属性,优缺点,作用和使用场景,Cookie到JWT场景,安全等的区别。 上章:主要介绍背景和Cookie 中章:主要介绍一下Session...
介绍如何在ASP.NET CORE中使用JWT实现令牌认证和授权。
主要介绍了基于JWT实现SSO单点登录流程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
随着技术的发展,分布式web应用的普及,通过session管理用户登录状态成本越来越高,因此慢慢发展成为token的方式做登录身份校验,然后通过token去取redis中的缓存的用户信息,...本文主要介绍使用JWT进行接口身份认证。
上章:主要介绍一下背景和Cookie。 ...最通俗的关于Cookie, Session,Token和JWT的相关笔记和理解。在上章笔记中主要介绍一下背景和...终章:主要介绍JWT并总结JWT和Token的区别,以及总结Cookie到Token的区别与发展。
本篇文章主要介绍了Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本文档介绍了基于会话的方法和基于 JWT 的方法的身份验证过程。它还讨论了与 JWT 相关的安全性、性能和过期问题。该文档最后建议使用 JWT 进行身份验证,尤其是在分布式环境中。它提供了用于生成和解析 JWT 令牌的...
在本文中,我们将介绍如何在 .NET 中使用 JWT 实现授权,包括如何创建和验证 JWT、如何在应用程序中使用 JWT 进行身份验证和授权、如何使用策略和角色进行权限控制等,如何实现全局必须授权等。
关于JWT是什么,大家可以看看官网,一句话介绍下:是可以实现服务器无状态的鉴权认证方案,也是目前最流行的跨域认证解决方案。 要实现JWT认证,我们需要分成如下两个步骤 客户端获取JWT token。 服务器对客户端...
JWT认证简单介绍 关于Jwt的介绍网上很多,此处不在赘述,我们主要看看jwt的结构。 JWT主要由三部分组成,如下: HEADER.PAYLOAD.SIGNATURE HEADER 包含token的元数据,主要是加密算法,和签名的类型,如下面的信息...
介绍JWT( )的Delphi实现。支持的算法算法地位没有任何 :thumbs_up: HS256 :thumbs_up: HS384 :thumbs_up: HS512 :thumbs_up: 以下算法需要第三方库ES256 :thumbs_up: ES384 :thumbs_up: ES512 :thumbs_up: ES256K ...
基于springboot+shiro+jwt+vue+redis的后台管理系统.zip基于springboot+shiro+jwt+vue+redis的后台管理系统.zip基于springboot+shiro+jwt+vue+redis的后台管理系统.zip基于springboot+shiro+jwt+vue+redis的后台管理...
【资源介绍】 基于SpringBoot+Mybatis-Plus+JWT 前后端分离的社区系统源码.zip基于SpringBoot+Mybatis-Plus+JWT 前后端分离的社区系统源码.zip基于SpringBoot+Mybatis-Plus+JWT 前后端分离的社区系统源码.zip基于...
主要介绍了JWT Token实现方法及步骤详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下