服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 关于JWT与cookie和token的区别说明

关于JWT与cookie和token的区别说明

2022-01-25 01:05微微一笑满城空 Java教程

这篇文章主要介绍了JWT与cookie和token的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

一. cookie

A)cookie如何认证

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

2.服务器验证用户名和密码,正确的就创建一个会话(session),同时会把这个会话的ID保存到客户端浏览器中,因为保存的地方是浏览器的cookie,所以这种认证方式叫做基于cookie的认证方式。

3.后续的请求中,浏览器会发送会话ID到服务器,服务器上如果能找到对应的ID的会话,那么服务器就会返回需要的数据给浏览器。

4.当用户退出登录,会话会同时在客户端和服务器端被销毁。

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传输(URLsafe)。不想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.

?
1
2
3
4
{
“alg”: “HS256”,
“typ”: “JWT”
}

这会被经过base64Url编码形成第一部分

2.Payload

token的第二个部分是荷载信息,它包含一些声明Claim(实体的描述,通常是一个User信息,还包括一些其他的元数据)

声明分三类:

1)Reserved Claims,这是一套预定义的声明,并不是必须的,这是一套易于使用、操作性强的声明。包括:iss(issuer)、exp(expirationtime)、sub(subject)、aud(audience)等

2)Plubic Claims,

3)Private Claims,交换信息的双方自定义的声明

?
1
2
3
4
5
{
“sub”: “1234567890”,
“name”: “John Doe”,
“admin”: true
}

同样经过Base64Url编码后形成第二部分

3.signature

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

例如使用的是HMAC SHA256算法,大致流程类似于: HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret)

这个signature字段被用来确认JWT信息的发送者是谁,并保证信息没有被修改

C)为什么要使用JWT

相比XML格式,JSON更加简洁,编码之后更小,这使得JWT比SAML更加简洁,更加适合在HTML和HTTP环境中传递。

在安全性方面,SWT只能够使用HMAC算法和共享的对称秘钥进行签名,而JWT和SAML

token则可以使用X.509认证的公私秘钥对进行签名。与简单的JSON相比,XML和XML数字签名会引入复杂的安全漏洞。

因为JSON可以直接映射为对象,在大多数编程语言中都提供了JSON解析器,而XML则没有这么自然的文档-对象映射关系,这就使得使用JWT比SAML更方便

java json web token工具类

D)JWT的Maven引入

?
1
2
3
4
5
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.0</version>
</dependency>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。

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

延伸 · 阅读

精彩推荐
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7482021-02-04
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16