712 字
4 分钟
登录鉴权

浏览器存储#

如果cookie有值,浏览器会自动的在请求之前把cookie添加进去。

local storage#

前端把字段存储到对应域名专属的存储空间,请求的时候手动带上这个字段。

session#

传统的登录鉴权方法,登录验证成功后后端返回一个随机的token,并维护着一个用户和token对应的表,token返回到前端,可以把他存到随便一个浏览器存储里,只要下次请求带着这个token返回到后端就行了。后端查表验证这个人是谁。 查到有记录,那么就成功鉴权了。如果想要让对应的session失效,就直接在数据库里删除了对应的记录就行了。

JWT#

和上面一样,登陆验证成功之后,后端返回一个token,但这个token不是随机值,他就是一个编码过的对象。总共有3段,用.分隔。

  • 第一段Header头部,带着加密算法,告诉后端该用什么算法验证签名
  • 第二段Payload负载,想带什么就带什么,一般是用户的uid、用户名、token过期时间。
  • 第三段Signature签名,负载和secret一起生成的一个东西,能够用来验证第二段payload有没有被篡改。 这三段被base64编码之后分段被放在token里,下面是个典型的token
ipython
In [1]: import jwt
In [2]: encoded_jwt = jwt.encode({"some": "payload"}, "secret", algorithm="HS256")
In [3]: encoded_jwt
Out[3]: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg'
#头部:HS256.负载:{"some": "payload"}.签名:<用payload和secret一起生成的>

token被用户从前端重新发送回来之后,进行验证用负载和secret重新算一遍比较一下签名是否一致,一致则认为payload里的内容可以信任,就认证了用户的身份。 这个token谁也能用base64编码的方式解码出来里面的内容,但是就算能修改里面的payload字段重新编码,最后到后端还是不行,因为payload和签名对应不上了。 jwt的方式,除非后端把secret或者编码方式变了,不然是不可能让token手动失效的。

flask session#

很方便的flask自带的库,其实和jwt原理一样只不过是存在了cookie里,而大部分别的都是存在local storage里的。

pyjwt#

这个库是实现jwt最常用的库,其实也很简单,其实就俩函数,一个生成jwt,一个验证jwt,你看他文档,非常之简单一看就会用了。

其他#

建议后端统一写装饰器,装饰所有需要被验证身份的api,或者是别的需求比如判断请求的ip啥的,要啥有啥。前端在api的实现的那里统一写拦截器在请求头上添加jwt

登录鉴权
https://blog.cannian.space/posts/2026-3-22-jwt/
作者
Cannian
发布于
2026-03-22
许可协议
CC BY-NC-SA 4.0