2020.7.23 JWT和跨域

发布于 21 天前  6 次阅读


1.学习内容

  • session机制缺点

    • session需要保存内存中,资源会被消耗
    • session 会被CSRF攻击
    • 扩展性:高并发多端,session需要配置
  • session在redis怎么保存的?

    • 保存的类型是string
    • key 是session id
    • value 是一个带引号的字典(‘{name:xxx}’)
  • token认证机制

    • token保存在浏览器的storage中
    • 携带token在头文件中
    • 服务端验证,获取加密数据,做一定处理
    • token不用保存,每次都会被重新计算
  • jwt组成部分

    • eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. 头部
    • eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9. payload
    • TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ 签证
    • 1.头部、token类型,加密算法(HMAC,SHA256) base64
      • 以json形式 存放:{‘typ’:”JWT”,’alg’:”HS256”}
      • 头部base64加密
    • 2.payload 载荷(用户有效信息,过期时间,签发时间) base64
      • 以json形式 存放:{}
    • 3.签证(签名)信息 sha256
      • 三部分:header + payload + sign
      • 使用加密算法将三部分加密 (有一个秘钥)
      • 秘钥才是jwt最重要的点
      • django 项目settings中有一个秘钥文件,可以使用这个进行加密
  • JWT怎么使用

    • 在请求头中,添加Authorization字段
  • JWT的优点

    • json的通用性很高,所以JWT可以跨语言
    • payload载荷部分,可以存放一些数据信息(非敏感信息)
    • 便于传输:jwt构成简单,字节占用小,方便传输
    • 不需要在服务端保存,易于应用分布式
  • JWT安全相关

    • 在payload不能存放敏感信息,paload可解密
      • 密码不要保存在payload中
    • 保护好sercet 私钥
    • 使用https协议保持安全
  • payload

  • 浏览器同源策略

    • 不同协议,ip,端口号,域名,都是跨域操作,被禁止
    • 可以使用script 标签绕过
    • 可以接收后端js代码执行
  • Django 跨域CORS设置

    • 1.需要安装django-cors-headers
    • 2.在settings的app中注册corsheaders
    • 3.中间件中MIDDLEWARE ,最开始写入'corsheaders.middleware.CorsMiddleware',
    • 4.可选 配置白名单CORS_ORIGIN_WHITELIST = ()
    • 5.是否允许携带Cookie
  • 跨域请求流程

    • 先发送options 询问后端是否允许跨域(会查询白名单)
    • 符合可以跨域,则发送第二次请求携带数据

2.扩展延伸知识

  • ubuntu npm安装

  • 如何让创建的django应用 自带urls.py文件

    • 在django源码中(),conf文件中,app_template中修改
  • pycharm 远程开发

  • docker 更改启动容器

  • mysql配置远程连接

  • mysql8.0配置文件

  • api怎么学习

    • 1.一定要对常用的api有个印象,知道干嘛用的
    • 2.随时查阅文档,多看看文档,多用用api自然记住
    • 3.对api的实现原理有了解,可以记得更深
  • 服务器传输图片(图片为什么转base64)

    • 提升性能: 网页上的每一个图片,都是需要消耗一个 http 请求下载而来的, 图片的下载始终都要向服务器发出请求,要是图片的下载不用向服务器发出请求,base64可以随着 HTML 的下载同时下载到本地.减少https请求。
    1. 加密: 让用户一眼看不出图片内容 , 只能看到编码。
    2. 方便引用: 在多个文件同时使用某些图片时, 可以把图片转为base64格式的文件, 把样式放在全局中, 比如common.css, 以后在用的时候就可以直接加类名, 二不需要多层找文件路径, 会提升效率

3.灵感代办

4.复习内容

5.学习成果&问题


Ares个人进阶之路