zoukankan      html  css  js  c++  java
  • JWT验证机制【Python版Flask或自己写的后端可以用】【刘新宇】

    JWT

    Json Web Token(JWT)

    JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在两个组织之间传递安全可靠的信息。

    官方定义:JSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties

     

    JWT是一个有着简单的统一表达形式的字符串:

     

    头部(Header)

    头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。 JSON内容要经Base64 编码生成字符串成为Header。

    载荷(PayLoad)

    payload的五个字段都是由JWT的标准所定义的。

    1. iss: 该JWT的签发者
    2. sub: 该JWT所面向的用户
    3. aud: 接收该JWT的一方
    4. exp(expires): 什么时候过期,这里是一个Unix时间戳
    5. iat(issued at): 在什么时候签发的

    后面的信息可以按需补充。 JSON内容要经Base64 编码生成字符串成为PayLoad。

    签名(signature)

    这个部分header与payload通过header中声明的加密方式,使用密钥secret进行加密,生成签名。 JWS的主要目的是保证了数据在传输过程中不被修改,验证数据的完整性。但由于仅采用Base64对消息内容编码,因此不保证数据的不可泄露性。所以不适合用于传输敏感数据。

    JWT的Python库

    独立的JWT Python库

    安装

    •   $ pip install pyjwt
      

    用例

    •   >>> import jwt
      
        >>> encoded_jwt = jwt.encode({'some': 'payload'}, 'secret', algorithm='HS256')
        >>> encoded_jwt
        'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg'
      
        >>> jwt.decode(encoded_jwt, 'secret', algorithms=['HS256'])
        {'some': 'payload'}

     示例代码:产生与校验

    import jwt from flask import current_app   
    def generate_jwt(payload, expiry, secret=None):     
    """     生成jwt     
    :param payload: dict 载荷     
    :param expiry: datetime 有效期     
    :param secret: 密钥     
    :return: jwt     
    """    
     _payload = {'exp': expiry}     
    _payload.update(payload)      
    if not secret:         
    secret = current_app.config['JWT_SECRET']      
    token = jwt.encode(_payload, secret, algorithm='HS256')     
    return token.decode()   def verify_jwt(token, secret=None):     
    """     检验jwt     :param token: jwt     :param secret: 密钥     :return: dict: payload     """     
    if not secret:         
    secret = current_app.config['JWT_SECRET']      
    try:         
    payload = jwt.decode(token, secret, algorithm=['HS256'])     
    except jwt.PyJWTError:        
     payload = None      
    return payload
    多思考也是一种努力,做出正确的分析和选择,因为我们的时间和精力都有限,所以把时间花在更有价值的地方。
  • 相关阅读:
    电力基础知识培训(三)
    VB开发——打开Excel并使特定的worksheet处于激活状态
    电力基础知识培训(二)
    Professionals train themselves
    WINCE6.0 + S3C2443的启动过程nboot篇
    WINCE下如何设置/删除/查询这些环境变量
    WINCE6.0+S3C6410 watchdog重新启动
    在WinCE 6.0系统下实现USB功能定制
    在WINCE5.0开始菜单中添加应用程序
    WINCE内存机制
  • 原文地址:https://www.cnblogs.com/LiuXinyu12378/p/11308723.html
Copyright © 2011-2022 走看看