flask项目--认证方案JWT

1. jwt

  • 对比状态保持机制
    • APP不支持状态保持
    • 状态保持有同源策略, 默认无法跨服务器传递(nginx可以处理)
  • JWT不会对数据进行加密, 所以数据中不要存放有阅读价值的数据

  • 不可逆加密
    • md5 sha1 sha256
    • 主要用于数据认证, 防止数据被修改
  • 消息摘要 MD
    • 通过哈希算法将任意长度内容转为定长内容, 且相同内容的哈希值始终相同, 不同内容的哈希值不同(极小概率出现碰撞)
    • 由于其唯一性, 一般将数据的哈希值称为数据的摘要信息, 称为数据的"指纹", 用于检测数据是否被修改
    • 代表算法 sha1 sha256 md5
    • 缺点
      • 哈希算法是公开的, 如果可以获取到明文, 就可以穷举出使用的算法
  • 消息认证 MA
    • 哈希算法基础上混入秘钥, 防止哈希算法被破解, 避免签名被伪造
    • 代表算法 hmacsha256
    • JWT一般会采用 消息认证 机制`

2. PyJWT (重点)

  • 安装 pip install PyJWT
    flask项目--认证方案JWT_第1张图片

3. 数字签名 (拓展)

  • 消息认证存在缺点
    • 之前没有对服务器返回的数据进行验签, 无法确认数据是否被修改(服务器身份是否合法)
    • 将秘钥交给客户端, 客户端才可以验签服务器返回的数据是否被修改
    • 但是客户端安全性较差, 一旦秘钥泄露, 仍然可以伪造签名
  • 利用非对称加密对摘要信息进行加密, 避免摘要信息被伪造
  • 非对称加密采用秘钥对
    • 公钥和私钥
    • 公钥加密, 私钥解密
    • 私钥加密, 公钥解密
    • 私钥可以推出公钥, 公钥无法推出私钥
  • 发送者使用私钥对数据摘要加密(签名), 接收者使用对应的公钥解密, 然后对数据进行哈希处理, 比对摘要信息是否一致(验签)
  • 代表算法 RSA
  • 使用场景
    • 安全级别要求比较高的系统, 如银行等
  • 优点
    • 客户端不会像消息认证一样保存秘钥, 而是保存了非对称加密的公钥, 即使客户端被破解, 公钥被获取, 也无法通过公钥生成合法的签名
  • 缺点
    • 效率低

  • 使用openssl 生成RSA秘钥对
# 生成私钥,指定私钥的长度为2048bit   1024基本安全, 2048非常安全
openssl genrsa -out rsa_private_key.pem 2048
# 根据私钥生成对应的公钥
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key_2048.pub
# 私钥转化成pkcs8格式, 非必须,pkcs8格式解析起来更方便
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt > rsa_private_key_pkcs8.pem
  • 安装RSA类库pip install cryptography
    flask项目--认证方案JWT_第2张图片

转载于:https://www.cnblogs.com/oklizz/p/11414429.html

你可能感兴趣的:(flask项目--认证方案JWT)