Token令牌的原理及使用

1. Token的定义

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

token是有时效的,一段时间之后用户需要重新验证。我们也不一定需要等到token自动失效,token有撤回的操作,通过token revocataion可以使一个特定的token或是一组有相同认证的token无效。

2. 使用Token的目的

Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

3. Token 的优点

扩展性强,无状态、可扩展。
在客户端存储的Tokens是无状态的,并且能够被扩展。基于这种无状态和不存储Session信息,负载均衡器能够将用户信息从一个服务传到其他服务器上。
如果我们将已验证的用户的信息保存在Session中,则每次请求都需要用户向已验证的服务器发送验证信息(称为Session亲和性)。用户量大时,可能会造成一些拥堵。
而使用tokens之后这些问题都迎刃而解,因为tokens自己hold住了用户的验证信息。

安全性强,非常适合用在 Web 应用或者移动应用上。Token 的中文有人翻译成 “令牌”,意思是:拿着这个令牌,才能过一些关卡。

4. Token一般用在三个地方

①防止表单重复提交
CSRF攻击(跨站点请求伪造)
③身份验证(单点登录)

5. Token的验证过程

(1) 客户端使用用户名跟密码请求登录 ;
(2) 服务端收到请求,去验证用户名与密码 ;
(3)验证成功后,服务端会签发一个 Token,再把这个 Token发送给客户端 ;
(4)客户端收到 Token 以后可以把它存储起来,比如放在Cookie、 Local Storage、Session Storage中;
(5)客户端每次向服务端请求资源的时候需要带着服务端签发的Token ;
(6)服务端收到请求,采用filter过滤器,校验客户端请求带着的 Token,校验成功则返回请求数据,校验失败则返回错误码。

token示意图:
token图(该图片来自脚本之家https://www.jb51.net/)

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
JWT(JSON Web Token)是一种基于JSON格式的安全令牌,用于在网络应用中传递声明。JWT由三个部分组成,分别是Header(头部)、Payload(负载)和Signature(签名)。 Header部分通常由两部分组成,分别是token类型和算法类型,例如: ``` { "alg": "HS256", "typ": "JWT" } ``` Payload部分是JWT的核心,包含了一些声明信息,例如用户ID、用户名、过期时间等,也可以自定义一些信息,如下所示: ``` { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } ``` Signature部分是使用私钥对Header和Payload进行签名得到的,用于验证JWT的真实性和完整性。签名的过程如下: 1. 将Header和Payload进行Base64编码,得到两个字符串 2. 将两个字符串用`.`连接起来,得到一个字符串 3. 使用私钥对字符串进行签名,得到一个密文 JWT的验证过程如下: 1. 将Header和Payload进行Base64编码,得到两个字符串 2. 将两个字符串用`.`连接起来,得到一个字符串 3. 使用公钥对密文进行验签,得到一个字符串 4. 将验签得到的字符串和第2步得到的字符串进行比较,如果相等则验证通过 JWT的优点在于它是无状态的,即服务端不需要保存任何状态信息,只需要验证JWT的合法性即可。这样可以减轻服务器的负担,提高系统的可伸缩性。同时,JWT还支持跨域访问和多语言环境,是一种非常灵活的令牌方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清颖~

您的鼓励让我们一起进步,加油!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值