zoukankan      html  css  js  c++  java
  • 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安全网络协议
  • 相关阅读:
    解决配置Windows Update失败问题
    Rabbit MQ 消息确认和持久化机制
    Spring Boot事务管理(上)
    Spring Boot事务管理(中)
    Spring Boot事务管理(下)
    接口和抽象类的区别
    MySQL索引优化
    Spring 注解之@RestController与@Controller的区别
    Spring Boot核心注解@SpringBootApplication
    Java抽象类与接口的区别
  • 原文地址:https://www.cnblogs.com/yqyn-study/p/13409264.html
Copyright © 2011-2022 走看看