DRF JWT认证基础

JWT认证机制 : 用户登录之后, 为了保持用户的登录状态, 使用Json Web Token认证机制

1. session认证方式:

 

基于session的认证方式会出现的问题(为什么不用session认证):

  Session:  每认证一个用户之后, 服务端做一次记录, session都是保存在内存中,随着认证用户的增多,服务端的开销会明显增大。

  CSRF: session是依赖于cookie的, 如果cookie被截获,用户就会很容易受到跨站请求伪造的攻击。

  拓展性: 认证的记录被保存在内存中的话,这意味着用户下次请求还必须要请求在这台服务器上,这样才能拿到授权的资源,这样在分布式的应用上,相应的限制了负载均衡器的能力。

 

2. JWT token认证机制:

 

     

 

jwt认证流程:  

 

  • 用户使用用户名和密码来请求服务器进行登录
  • 服务器验证用户的登录信息
  • 服务器通过验证,生成一个token并返回给用户
  • 客户端存储token,并在每次验证请求携带上这个token值
  • 服务端验证token值,并返回数据

    

3. JWT token数据格式

JWT token是一个字符串,由3部分组成,用.隔开。如下:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.
TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
组成介绍:
1) 头部(header) :  声明类型,这里是jwt 声明加密的算法 通常直接使用 HMAC SHA256 
    { 'typ': 'JWT', 'alg': 'HS256' }
  然后将头部进行base64加密(该加密是可以对称解密的),构成了第一部分.
    eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

2)载荷(payload) : 载荷就是存放有效数据的地方。这些有效数据主要保存存储的数据和token的有效时间。
    { "username": "smart", "mobile": "13155667788", "email": "smart@163.com", "exp": "<token有效时间>" }
然后将其进行base64加密,得到JWT的第二部分。
    eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9

3) 签名(signature) : JWT的第三部分是一个签名信息,用来防止JWT token被伪造。
 

 

4. JWT认证使用注意点:

  • payload中不要存过于敏感的数据
  • 服务器的签名加密密钥需要保存好
  • 使用https安全网络协议

 

posted @ 2020-07-31 13:48  yqyn  阅读(178)  评论(0编辑  收藏  举报