JWT 认证机制

JWT认证机制: 做为目前前后端分离开发中用户身份认证最流行一种解决方案,叙述一下我的理解,以供参考。

Session 的优缺点:

缺点:

  1. session信息存在服务器,如果用户登录过多,会过多占用服务器存储空间。
  2. session依赖于cookie,如果cookie被利用,可能会产生CSRF跨站请求伪造。
  3. 对于分布式的网站应用,如果session是存在服务器内存中,session共享会成为问题。

优点:

  1. session可以存放敏感数据

JWT认证机制和session认证机制有何区别?

⚀ 优点:jwt token存储到客户端,不占用服务器存储空间。
⚀ 缺点:jwt token不要存敏感信息。

客户端与服务器之间的交互过程,做了一张图来分析,如下图所示:
JWT 认证机制_第1张图片
JWT token 是一个字符串,由3部分组成,之间以 . 隔开

# 生成的JWT token 字符串

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

三部分可以分为header,payload,signature

header: 头部
{
	"token类型",
	"签名加密算法"
}
# 使用base64对头部内容进行编码加密,生成字符串就是header

payload: 载荷:保存有效的数据。
{
	"user_id": "用户id",
	"username": "用户名",
	"mobile": "手机号",
	...
	"exp": "jwt token有效时间"
}
# 使用base64对载荷内容进行编码加密,生成字符串就是payload

signature: 签名信息,防止jwt token被伪造。
	签名验证。
	
# 签名生成过程就是:服务器在生成jwt token时,会将header和payload字符串进行拼接,用.隔开。之后会
使用一个只有服务器知道的密钥对拼接后的内容进行加密,signature的内容就是加密之后生成的字符串。
  • For example:

客户端和服务器之间的关系就和我们每个人一样!!

我们每个人出生都有一个身份信息去辨识,我们现在把服务器比作公安局 ,服务器生成的字符串 JWT token 就是一个身份证号。
现在我们满足年龄需要使用身份证时,就要去公安局去办理领取,公安局把办理好身份证交给你,下次你在拿身份证过来公安局用的时候,你就把你的身份证交给公安局去验证,而如何知道你身份真假,自然就有中间过程的防伪技术

  • JWT认证使用注意点
  1. payload不要存放敏感数据。
  2. 服务器密钥需要保存好。
  3. 如果可以,请使用https网络协议。

希望可以帮助到工作中需要的程序员们!

你可能感兴趣的:(python,web开发,JWT认证)