token解决http无状态问题

本文介绍了HTTP协议的无状态特性及其在用户身份验证中的挑战。讨论了cookie技术的局限性,并详细讲解了token,特别是JWT的工作原理、结构和应用场景。通过对比,阐述了JWT如何在浏览器、APP等不同场景下解决身份验证问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

  • http协议是应用层的超文本传输协议,用于客户端和服务器之间的通信,是无状态的,不能识别用户身份和状态

场景需求

  • 需要对用户的登录状态进行验证,如果用户已经登录,允许此用户进行操作,如果用户没有登录,则必须登录后才可操作

cookie技术分析

  • 针对这种需求,cookie和session技术(session基于cookie,下文统称cookie)已经可以满足,但是cookie技术是针对web浏览器–服务器架构的,这项技术的简单原理是:当用户登录某个系统时,服务器会记录此用户的登录状态并产生一个记录,大致是:{‘xxx-xxx’:‘用户信息’},并发送一个’sessionid:xxx-xxxx’给浏览器,浏览器会将sessionid存储在本地中,当再次想服务器发送请求时,会将这个sessionid一起发送给服务器,服务器则根据sessionid查找到相应的用户信息并查看登录状态,作出判断
  • 可以看出,cookie技术是基于浏览器的,如果不通过浏览器访问服务器则不能使用,比如当手机的app访问服务器时,就不能使用cookie技术,此时token就来啦,值得注意的是:token几乎能用于包括浏览器、app(android,ios系统)在内的应用访问服务器

token知识点讲解

token原理
  • token工作原理与cookie原理相似:
    • 用户发送登录请求时,服务端处理并同意用户登录后,生成一个jwt结果,结果中包含过期时间,并返回给客户端,客户端进行存储
    • 当用户发送请求时,会将之前服务器发送过来的token再和请求一起发给服务端,服务端会很据token中的信息重新生成一个token,两者比对,如果符合判定条件,则允许用户操作,如果不符合判定条件,让用户登录即可
    • 此处token使用jwd计算
token结构:

header + payload + sigin

  • header
    • 常见格式:{‘alg’:‘HS256’, ‘typ’:‘JWT’},alg表示使用的算法,这一部分采用base64加密,但是base64很容易解密,所以这部分相当于明文,对base64加密感兴趣的小伙伴可自行了解,并不难哦
  • payload
    • 分为公有声明和私有声明,公共声明和私有声明均在同一个字典中,转成json串并用base64加密
    • 常见公有声明:
{
'exp':xxx, # Expiration Time 此token的过期时间的时间戳
 'iss':xxx,# (Issuer) Claim 指明此token的签发者
 'iat':xxx, # (Issued At) Claim 指明此创建时间的时间戳
 'aud':xxx, # (Audience) Claim	指明此token签发面向群体
}

** 私有声明可根据业务需求,自行决定,如:

{'username': 'wangxiaoer'}
  • signature签名–token中用于识别的最重要部分,使用hash散列加密,
    • 根据header中的alg确定 具体算法,以下以HS256为例:
      ​ HS256(自定义的key , base64后的header + ‘.’ + base64后的payload
      ​ 解释:用自定义的key, 对base64后的header + ‘.’ + base64后的payload进行hmac计算
jwt结果:

base64(header) + ‘.’ + base64(payload) + ‘.’ + base64(sign)
如:
b’eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c’
有兴趣的小伙伴可以自行前往jwt官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值