zoukankan      html  css  js  c++  java
  • JsonWebToken

    这次使用的Django框架, 由于http协议本身是一个无状态的协议, 就意味着用户需要每次向我们服务器发起请求进行验证,因为是是http协议,所以我们不知道是哪一个用户, 为了解决这个问题,我们一般在服务器保存一份用户的登录信息, 传递给浏览器, 保存在cookie中, 一边下次进行识别。但是这种认证会随着用户的增加, 服务器会损耗性能。而且是保存在cookie中, 根据浏览器的同源策略, 也不是很安全。
     
    jwt的构成:字符串
    第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(signature).
    header
    jwt的头部承载两部分信息:
        声明类型,这里是jwt
        声明加密的算法 通常直接使用 HMAC SHA256
        转换成json字符串进行  json.dumps转换
    第二部分:
        识别用户的额外信息
    第三部分:
        头部加密的字符串, 载荷加密的字符串,  secret 
        三部分注成进行加密
        加密的结果作为第三部分值
    基于token认证的流程:
            1、用户使用用户名密码来post请求服务器 
            2、服务器进行验证用户的信息
            3、服务器通过验证生成token 发送给用户一个token
            4、客户端存储(取出response.data.token)token(sessionStorage关闭浏览器之后会消失,本次有效和localStorage长期数据),并在每次请求时报文附送上这个token值 
            5、服务端验证token值,发现是否改变, 改变了则不认可,未改变并返回数据
     
     
    使用jwt的扩展, 手动签发jwt的方法
    注册成功时返回token, 在视图中创建token, 前端也进行token
     
     前端是放在请求头当中,然后进行后端检查
    校验的时候: 1. 头部 ->加密计算的方法, 2. 载荷 -->具体数据  3. 头部+载荷+secret--> 加密算法计算  的签名值 和 前三部分值进行对比,是否发生改变.
     
    我们可以将JWT保存在cookie中,也可以保存在浏览器的本地存储里,我们保存在浏览器本地存储中
    浏览器的本地存储提供了sessionStorage 和 localStorage 两种:
    sessionStorage 浏览器关闭即失效
    localStorage 长期有效
  • 相关阅读:
    sync.Once.Do(f func())
    协程
    Qt 线程基础(QThread、QtConcurrent、QThreadPool等)
    linux下valgrind的使用概述
    QT--QSocketNotifier类介绍
    QThreadPool类和QtConcurrent命名空间
    联想电池维修
    asm
    tapset::iosched(3)
    systemtap --diskio
  • 原文地址:https://www.cnblogs.com/liudemeng/p/11509913.html
Copyright © 2011-2022 走看看