JWT认证方案与禁用令牌策略

本文探讨了JWT作为认证方案的优缺点,包括JWT的不可逆加密、消息摘要与数字签名机制。详细介绍了PyJWT的使用,以及JWE在数据加密中的角色。此外,还阐述了刷新令牌的实现流程及其在访问控制中的应用,并讨论了禁用令牌的必要场景和逻辑。
摘要由CSDN通过智能技术生成

认证方案

1.1 jwt
  • 对比状态保持机制

    • APP不支持状态保持
    • 状态保持有同源策略, 无法跨服务器传递
  • 不可逆加密

    • md5 sha1 sha256
    • 主要用于数据认证, 防止数据被修改
  • 消息摘要 MD

    • 通过哈希算法将任意长度内容转为定长内容, 且相同内容的哈希值始终相同, 不同内容的哈希值不同(极小概率出现碰撞)
    • 由于其唯一性, 一般将数据的哈希值称为数据的摘要信息, 称为数据的"指纹", 用于检测数据是否被修改
    • 代表算法 sha1 sha256 md5
    • 缺点
      • 哈希算法是公开的, 如果可以获取到明文, 就可以穷举出使用的算法
  • 消息认证 MA

    • 哈希算法基础上混入秘钥, 防止哈希算法被破解, 避免签名被伪造
    • 代表算法 hmacsha256
    • JWT一般会采用 消息认证 机制
      • 一般的web应用, 不会将秘钥交给客户端 ,也就表示客户端不会验签服务器的身份
    • 缺点
      • 一旦秘钥泄露, 仍然可以伪造签名
  • 数字签名

    • 利用非对称加密对摘要信息进行加密, 避免摘要信息被伪造
    • 非对称加密采用秘钥对
      • 公钥和私钥
      • 公钥加密, 私钥解密
      • 私钥加密, 公钥解密
      • 私钥可以推出公钥, 公钥无法推出私钥
    • 发送者使用私钥对数据摘要加密(签名), 接收者使用对应的公钥解密, 然后对数据进行哈希处理, 比对摘要信息是否一致
    • 代表算法 RSA
    • 使用场景
      • 安全级别要求比较高的系统, 如银行等
    • 优点
      • 客户端不会像消息认证一样保存秘钥, 而是保存了非对称加密的公钥, 即使客户端被破解, 公钥被获取, 也无法通过公钥生成合法的签名
    • 缺点
      • 效率低

1.2 PyJWT
  • 安装 pip install PyJWT
import jwt
from datetime import datetime, timedelta
from jwt import PyJWTError

# 包装数据  jwt的规范中要求通过exp参数来设置有效期, 要求有效期使用格林尼治时间
payload = {
   'payload': 'test', 'exp': datetime.utcnow() + timedelta(seconds=30)}

key = 'secret'
# # 生成jwt
# token = jwt.encode(payload, key, algorithm='HS256')
# print(token)


token = b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXlsb2FkIjoidGVzdCIsImV4cCI6MTU2MjgwOTkzMn0.BSc0A2ibdjHTlmW7wtWfj5ZGkny8RX8tV12313'
# 验证jwt    pyjwt内部对有效期进行了验证, 如果超过时间, 会报错
try:
    ret = jwt.decode(token, key, algorithms='HS256')
    print(ret)
except PyJWTError 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值