认证机制之JWT

本文介绍了常见的认证机制,如HTTP BASIC AUTH、Session和Cookie,然后重点讲解了JWT(JSON Web Token)认证,包括JWT的定义、特点、优缺点、数据结构、原理以及JWT的实现。文中还提到了JWT的使用场景,如API服务、分布式系统中的单点登录问题,以及JWT相对于Session和Cookie的优势。最后,文章介绍了如何使用JJWT库在Java中创建和解析JWT,以及如何设置过期时间和自定义claims。
摘要由CSDN通过智能技术生成

常见的认证机制

HTTP BASIC AUTH

HTTP BASIC auth:每次请求API的时候,都会把用户名和密码通过restful API传给服务端。

可以实现一个无状态思想,即每次HTTP请求和以前都没有啥关系,只是获取目标URI,得到目标内容之后,这次连接就被杀死,没有任何痕迹。

缺点:通过http请求发送给服务端的时候,很有可能将我们的用户名密码直接暴漏给第三方客户端,风险特别大,因此生产环境下用这个方法很少。

Session和cookie

在服务端全局创建session对象,session对象保存着各种关键信息

向客户端发送一组sessionId,成为一个cookie对象保存在浏览器中。

认证时,cookie的数据会传入服务端与session进行匹配,进行数据认证。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t3YeeZAC-1576822693805)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.jpg)]

实现的是一个有状态的思想,即该服务的实例可以将一部分数据随时进行备份,并且在创建一个新的有状态服务时,可以通过备份恢复这些数据,以达到数据持久化的目的。

缺点

  • 安全性。cookies的安全性不好,攻击者可以通过获取本地cookies进行欺骗或者利用cookies进行CSRF攻击。

  • 跨域问题。使用cookies时,在多个域名下,会存在跨域问题。

  • 有状态。session在一定的时间里,需要存放在服务端,因此当拥有大量用户时,也会大幅度降低服务端的性能。

  • 状态问题。当有多台机器时,如何共享session也会是一个问题,也就是说,用户第一个访问的时候是服务器A,而第二个请求被转发给了服务器B,那服务器B如何得知其状态。

  • 移动手机问题。现在的智能手机,包括安卓,原生不支持cookie,要使用cookie挺麻烦。

大致流程

  1. 用户向服务器发送用户名和密码
  2. 服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
  3. 服务器向用户返回一个* session_id*,写入用户的* Cookie*。
  4. 用户随后的每一次请求,都会通过* Cookie*,将* session_id *传回服务器
  5. 服务器收到* session_id*,找到前期保存的数据,由此得知用户的身份。

JWT-Token认证

Token: 访问资源的凭据。

使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。

JWT简介

什么是JWT

JSON Web Token(JWT)是一个基于json数据结构的,非常轻巧的规范

它允许我们使用jwt在用户和服务器之间传输安全可靠的信息。

可以通过数字签名进行验证和信任

虽然JWT可以加密以在各方之间提供保密,但只将专注于签名令牌。

签名令牌可以验证其中包含的声明的完整性,而加密令牌则隐藏其他方的声明。

当使用公钥/私钥对签署令牌时,签名还证明只有持有私钥的一方是签署私钥的一方。

特点

(1)JWT 默认是不加密,但也是可以加密的。生成原始 Token 以后,可以用密钥再加密一次。

(2)JWT 不加密的情况下,不能将秘密数据写入 JWT。

(3)JWT 不仅可以用于认证,也可以用于交换信息。有效使用 JWT,可以降低服务器查询数据库的次数。

(4)JWT 的最大缺点是,由于服务器不保存 session 状态,因此无法在使用过程中废止某个 token,或者更改 token 的权限。也就是说,一旦 JWT 签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。

(5)JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,JWT 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证。

(6)为了减少盗用,JWT 不应该使用 HTTP 协议明码传输,要使用 HTTPS 协议传输。

通过session管理用户登录状态成本越来越高,因此慢慢发展成为token的方式做登录身份校验,然后通过token去取redis中的缓存的用户信息,随着之后jwt的出现,校验方式更加简单便捷化,无需通过redis缓存,而是直接根据token取出保存的用户信息,以及对token可用性校验,单点登录更为简单。

优点

在分布式系统中,很好地解决了单点登录问题,很容易解决了session共享的问题。

那Token机制相对于Cookie机制的好处

  • 支持跨域访问:Cookie是不允许垮域访问的,这一点对Token机制是不存在的,前提 是传输的用户认证信息通过HTTP头传输.
  • 无状态:Token机制本质是校验, 他得到的会话状态完全来自于客户端, Token机制在服务端不需要存储session信息,因为 Token 自身包含
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值