Python_JWT_通常用于身份验证和信息交换

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用环境间安全地传输信息。JWT 通常用于身份验证和信息交换
Jwt由三部分组成,用dian(.)分割

  • Header(头部)
  • Payload(负载)
  • Signature(签名)

Header(头部):
描述 JWT 的元数据,通常包括两个部分:
typ:指定令牌的类型,通常是 JWT。
alg:指定签名使用的算法,如 HS256(HMAC SHA256)或 RS256(RSA SHA256)。

   {
       "alg": "HS256",
       "typ": "JWT"
     }

Payload(负载):
包含声明(claims),即关于实体(通常是用户)和其他数据的声明。
声明分为三种:
Registered Claims:预定义的声明,不是强制性的,但推荐使用,例如 iss(发行者)、sub(主题)、aud(受众)、exp(过期时间)、nbf(生效时间)、iat(签发时间)、jti(JWT ID)。
Public Claims:可以由使用 JWT 的各方自定义,但为了避免冲突,建议在命名空间中定义。
Private Claims:用于在同意使用它们的各方之间共享信息,既不是注册声明也不是公开声明。

     {
       "sub": "1234567890",
       "name": "John Doe",
       "admin": true
     }
     

Signature(签名):
用于验证消息在整个传输过程中没有被篡改。
签名的计算方式:
使用 Base64Url 编码的 Header 和 Payload。
使用密钥(对于 HMAC 算法)或公钥/私钥对(对于 RSA 算法)。

     HMACSHA256(
       base64UrlEncode(header) + "." +
       base64UrlEncode(payload),
       secret)
     

工作流程

1.认证
用户向服务器发送用户名和密码
服务器验证凭据
如果验证成功,服务器返回一个JWT
2.授权
客户端将jwt存储在本地
客户端在后续请求中将JWT包含在请求头中(通常是 Authorization: Bearer )。
服务器验证jwt的有效性(签名,过期时间等)
如果有效,服务器处理请求并返回响应

示例

import jwt
import datetime

class Token:
    def __init__(self):
        self.secret_key = 'luckyletop'
    # 加密
    def encode(self,data):
        return jwt.encode(data,self.secret_key,algorithm='HS256')
    # 带生命周期的token
    def encode_time(self,data,seconds=30):
        # 提前定义载荷信息
        playload = {
            "exp":int((datetime.datetime.now()+datetime.timedelta(seconds=seconds)).timestamp()),
            "data":data
        }
        return jwt.encode(playload,self.secret_key,algorithm='HS256')
    # 解密
    def decode(self,token):
        data = jwt.decode(token,self.secret_key,algorithms=['HS256'])
        return data

if __name__ == '__main__':
      token_instance = Token()
      encode_token = token_instance.encode({'username':'luckyletop@163.com','password':'123456'})
       decode_token = token_instance.decode(encode_token)



posted @ 2024-12-03 11:01  乐乐乐乐乐乐樂  阅读(53)  评论(0)    收藏  举报
jQuery火箭图标返回顶部代码