博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JWT与cookie和token的区别
阅读量:3960 次
发布时间:2019-05-24

本文共 2059 字,大约阅读时间需要 6 分钟。

一. cookie

A) cookie如何认证

  1. 用户输入用户名与密码,发送给服务器。
  1. 服务器验证用户名和密码,正确的就创建一个会话(session),同时会把这个会话的ID保存到客户端浏览器中,因为保存的地方是浏览器的cookie,所以这种认证方式叫做基于cookie的认证方式。
  1. 后续的请求中,浏览器会发送会话ID到服务器,服务器上如果能找到对应的ID的会话,那么服务器就会返回需要的数据给浏览器。
  1. 当用户退出登录,会话会同时在客户端和服务器端被销毁。

B) cookie认证方式的不足之处

  1. 服务器要为每个用户保留session信息,连接用户过多会造成服务器内存压力过大。

  2. 适合单一域名,不适合第三方请求。

二. token

A) token的认证过程

  1. 用户输入用户名和密码,发送给服务器。

  2. 服务器验证用户名和密码,正确的话就返回一个签名过的token(token 可以认为就是个长长的字符串),浏览器客户端拿到这个token。

  3. 后续每次请求中,浏览器会把token作为http header发送给服务器,服务器验证签名是否有效,如果有效那么认证就成功,可以返回客户端需要的数据。

  4. 一旦用户退出登录,只需要客户端销毁token即可,服务器端不需要任何操作。

B) token认证方式的特点

这种方式的特点就是客户端的token中自己保留有大量信息,服务器没有存储这些信息,而只负责验证,不必进行数据库查询,执行效率大大提高。

三.JWT

A) JWT介绍

  1. JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。

  2. 优点是在分布式系统中,很好地解决了单点登录问题,很容易解决了session共享的问题。jwt长度较小,且可以使用URL传输(URL safe)。不想cookies只能在web环境起作用。 JWT可以同时使用在web环境和RESTfull的接口。

    缺点是无法作废已颁布的令牌/不易应对数据过期。

B)JWT组成

JWT包含三个部分: Header头部,Payload负载和Signature签名。由三部分生成token,三部分之间用“.”号做分割。

列如 : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

  1. Header

    在Header中通常包含了两部分:type:代表token的类型,这里使用的是JWT类型。 alg:使用的Hash算法,例如HMAC SHA256或RSA.
    {
    “alg”: “HS256”,
    “typ”: “JWT”
    }
    这会被经过base64Url编码形成第一部分

  2. Payload

token的第二个部分是荷载信息,它包含一些声明Claim(实体的描述,通常是一个User信息,还包括一些其他的元数据)声明分三类:   1)Reserved Claims,这是一套预定义的声明,并不是必须的,这是一套易于使用、操作性强的声明。包括:iss(issuer)、exp(expiration time)、sub(subject)、aud(audience)等   2)Plubic Claims,   3)Private Claims,交换信息的双方自定义的声明{    "sub": "1234567890",    "name": "John Doe",    "admin": true}同样经过Base64Url编码后形成第二部分

signature 使用header中指定的算法将编码后的header、编码后的payload、一个secret进行加密。

例如使用的是HMAC SHA256算法,大致流程类似于: HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret)
这个signature字段被用来确认JWT信息的发送者是谁,并保证信息没有被修改3. signature 使用header中指定的算法将编码后的header、编码后的payload、一个secret进行加密。
例如使用的是HMAC SHA256算法,大致流程类似于: HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret)
这个signature字段被用来确认JWT信息的发送者是谁,并保证信息没有被修改

原文链接:https://blog.csdn.net/Cjava_math/article/details/81563871

你可能感兴趣的文章
浅析Hibernate映射(四)——组件映射(component)
查看>>
Hibernate性能优化
查看>>
Spring核心ioc
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
Struts2+Spring3+Mybatis3开发环境搭建
查看>>
mongoDB入门必读(概念与实战并重)
查看>>
通俗易懂解剖jbpm4
查看>>
云盘 同步盘介绍 同步工具介绍
查看>>
rsync
查看>>
win7 英文版电脑 不睡眠,不休眠
查看>>
Bash中如何判断一个命令是否存在 查看当前目录下文件的个数
查看>>
makefile
查看>>
linux 文件权限
查看>>
部分简化字感觉不如繁体字有深意
查看>>
cgo 崩溃 64位地址截断引发的挂死问题
查看>>
drbd
查看>>
网络 IP
查看>>
网络路由
查看>>
网络 tcp 性能 可靠
查看>>
网络 https 握手
查看>>