资讯专栏INFORMATION COLUMN

JSON WEB TOKEN(JWT)的分析

hsluoyz / 1390人阅读

摘要:当达到过期时间时,需要对进行续签,可以定时想服务器提交请求,重新获取来实现。注销问题注销问题当客户登录的时候,需要注销登录会话,由于是没有状态的,只能在客户端把删除,伪造一个注销的状态,真正的注销只能等待过期。

JSON WEB TOKEN(JWT)的分析

一般情况下,客户的会话数据会存在文件中,或者引入redis来存储,实现session的管理,但是这样操作会存在一些问题,使用文件来存储的时候,在多台机器上,比较难实现共享,使用redis来存储的时候,则需要引入多一个集群,这样会增加管理的工作量,也不方便。有一个直观的办法,就是将session数据,存储在客户端中,使用签名校验数据是否有篡改,客户请求的时候,把session数据带上,获取里面的数据,通过校验,然后进行身份认证。

数据存储在客户端中,会存在一些挑战:

  • 数据安全问题
  • 数据量不能太大
  • 续签的问题
  • 注销的问题

为了实现客户端存储会话数据的解决方案,制定了JSON Web Token的协议,详细的协议可以在:RFC7529查看。下面我们看看jwt协议是怎样解决上面的挑战的。

JWT的结构:

JWT加密后,使用的格式,分为三部分,header,payload和signature,使用.号连接起来:

Header.Payload.Signature

JWT的header:

JWT的header,定义了存储的算法和协议名称:

{
    "alg": "HS256",
    "typ": "JWT"
}

JWT的Payload:

下面这些负载字段,是JWT协议提供选用,一般情况下,payload的数据是不加密存储在客户端中的,所以要注意不要存储敏感信息:

iss (issuer):签发人
exp (expiration time):过期时间
sub (subject):主题
aud (audience):受众
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):编号

payload除了这些字段,还可以扩展一些数据,更加符合我们的需求:

{
    "iss": "foo",
    "extend_data": "hell"
}

JWT的Signature

服务端,有一个秘钥,通过秘钥对header和payload进行签名,使用header中指定的签名算法类型,一般有HMAC,RSA和ECDSA,下面是签名的格式:

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

JWT的通讯方式

JWT一般会将token数据存储在http请求的header中,通过Bearer来分隔:

headers: {
    "Authorization": "Bearer " + token
}

定义好数据结构和通讯方式,下面看看如何处理一些问题:

续签问题

每一个token产生,都应该限制好过期时间,确保只能在一段时间内有效,保证安全。当达到过期时间时,需要对token进行续签,可以定时想服务器提交请求,重新获取token来实现。

注销问题

当客户登录的时候,需要注销登录会话,由于token是没有状态的,只能在客户端把token删除,伪造一个注销的状态,真正的注销只能等待token过期。

也可以有种办法,就是把token的信息记录在redis中,当客户退出时,讲redis中的token删除,而一般请求时,会通过redis对数据进行校验,这样可以实现真的注销效果,但要引入多一个组件,把token变为有状态,如果用这种办法,也就不符合token存储在客户端的模式了

总结

如果能够支持,会话用的数据量较小,对注销可以等待超时的长效的场景,使用jwt作为会话数据存储是会比较方便的。而对于会话数据量大的场景,还是使用一般的方式比较好点。

参考资料

RFC7529

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/1240.html

相关文章

  • 跨域认证解决方案-JSON WEB TOKEN讲解与实战

    摘要:简称,在通信过程中,进行身份认证。服务器完全只靠这个对象认定用户身份。规定了个官方字段,供选用。1. JSON WEB TOKEN 1.1 什么是JWT ​ JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 ​ 简称JWT,在HTTP通信过程中,进行身份认证。 ​ 我们知道HTTP通信是无状态的,因此客户端的请求到了...

    caozhijian 评论0 收藏0
  • 使用JWT(Json Web Token)实现登录认证

    摘要:今天我们来结合实例给大家讲述的实战应用,就是如何使用前端与后端实现用户登录鉴权认证的过程。只用了一个串,建立前后端的验证的数据传递,实现了有效的登录鉴权过程。 今天我们来结合实例给大家讲述JWT(Json Web Token)的实战应用,就是如何使用前端Axios与后端PHP实现用户登录鉴权认证的过程。 文中涉及的重要知识点: axios异步请求:axios-基于Promise的HTT...

    Yu_Huang 评论0 收藏0
  • 详解 Cookie,Session,Token

    摘要:由于是存在客户端上的,所以浏览器加入了一些限制确保不会被恶意使用,同时不会占据太多磁盘空间。签名是对前两部分的签名,防止数据被篡改。的作用最开始的初衷是为了实现授权和身份认证作用的,可以实现无状态,分布式的应用授权。 前言 无状态的HTTP协议 很久很久之前, Web基本都是文档的浏览而已。既然是浏览, 作为服务器, 不需要记录在某一段时间里都浏览了什么文档, 每次请求都是一个新的HT...

    Allen 评论0 收藏0
  • jwt前后端整合方案

    摘要:到这里,基于的前后端分离实现方案就搞定啦四关于的一些思考实际上,在使用的过程中有一个比较致命的缺点,就是一旦签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。结语以上是关于基于的前后端分离实现方案的总结和思考。 一、jwt是什么 JWT全称, JSON Web Token,是一个以JSON为基准的标准规范。 举例:服务器认证以后,生成一个 JSON 对象,发回给用户,就像下...

    nevermind 评论0 收藏0
  • 如何在SpringBoot中集成JWT(JSON Web Token)鉴权

    摘要:在使用非对称加密算法进行签名的时候,还可以用于验证的发件人是否与中申明的发件人是同一个人。如果没有用非对称加密算法的话,把复制之后直接可以去官网在线解析。 这篇博客主要是简单介绍了一下什么是JWT,以及如何在Spring Boot项目中使用JWT(JSON Web Token)。 1.关于JWT 1.1 什么是JWT 老生常谈的开头,我们要用这样一种工具,首先得知道以下几个问题。 这...

    yeyan1996 评论0 收藏0

发表评论

0条评论

hsluoyz

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<