开发者

Python使用JWT的超详细教程

开发者 https://www.devze.com 2024-10-21 09:36 出处:网络 作者: 黄小耶@
目录一、JWT的介绍二、JWT的组成1、Header(头部)2、Payload(负载)3、Signature(签python名)三、python写JWT1、安装Jwt2、使用JWT3、解密JWT总结 一、JWT的介绍
目录
  • 一、JWT的介绍
  • 二、JWT的组成
    • 1、Header(头部)
    • 2、Payload(负载)
    • 3、Signature(签python名)
  • 三、python写JWT
    • 1、安装Jwt
    • 2、使用JWT
    • 3、解密JWT
  • 总结 

    一、JWT的介绍

    JWT(jsON Web Tokens)是一种用于在网络应用环境间安全地传输信息的简洁的、URL安全的令牌标准。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源编程服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

    二、JWT的组成

    JWT的结构分为三部分,它是用点来分割的,Header(头部),Payload(负载),Signature(签名)。如下图

    Python使用JWT的超详细教程

    1、Header(头部)

    头部通常包含了两部分信息:声明类型和使用什么算法,第一部分就是将json转化为字符串,然后用Base64加密,如下格式

    {
       "alg":"HS256",
       "type":"jwt"
    }

    2、Payload(负载)

    负载里面通常就是我们要传递给前端的值,如用户的一些信息啊,也是将json转换为字符串,然后用Base64加密,如下格式

    {
        "id":"123",
        "username":"xiaoming"
    }

    3、Signature(签名)

    签名的作用是保证JWT的未被篡改。签名的生成方gDNdA式是将编码后的头部、编码后的负载、秘密通过指定的算法进行签名。签名的作用是保证JWT的发送者不能抵赖自己发送的消息,接收者能够验证消息的完整性。这里是将前2部分的密文拼接起来,对这2部分进行HS256加密,然后加盐,最后在对加密后的内容用Base64加密一次

    三、Python写JWT

    1、安装Jwt

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PyJWT

    2、使用JWT

    import datetime
    import jwt
    
    def create_jwt():
        headers = {
      js      'alg': 'HS256',
            'typ': 'JWT'
        }  # jwt的头部,包含了类型和算法的指定
    
        payload = {
            "id": 123,
            "username": '小明',
            'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=12),
        }  # jwt的负载,都是一些自定义值,其中exp中的内容是我们指定jwt的一个有效时间,有效时间为12个小时
    
        token = jwt.encode(headers=headers, payload=payload, algorithm='HS256', key='123')  # 对上面内容进行加密,这里的key就是加的盐
        print(token)
    
    if __name__ == '__main__':
        create_jwt()

    3、解密JWT

    import datetime
    
    import jwt
    
    def create_jwt():
        headers = {
            'alg': 'HS256',
            'typ': 'JWT'
        }  # jwt的头部,包含了类型和算法的指定
    
        payload = {
            "id": 123,
            "username": '小明',
            'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=12),
        }  # jwt的负载,都是一些自定义值,其中exp中的内容是我们指定jwt的一个有效时间,有效时间为12个小时
    
        token = jwt.encode(headers=headers, payload=payload, algorithm='HS256', key='123')  # 对上面内容进行加密,这里的key就是加的盐,是自定义的,我们在使用盐的时候一般是唯一的一个值
        print(token)
        return token
    
    def decode_JWT(token):
        content = jwt.decode(jwt=token, key='123', algorithms=['HS256'])  # 对jwt进行解密,这里用的key必须和上面用的key一样,否则是无法解密出来的
        print(content)
    
    if __name__ == '__main__':
        token = create_jwt()
        decode_JWT(token)

    解密出来的结果如下图

    Python使用JWT的超详细教程

    总结&nbwww.devze.comsp;

    到此这篇关于Python使用JWT的文章就介绍到这了,更多相关Python使用JWT内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号