PyJWT翻译

来源:互联网 发布:centos 安装openjdk 编辑:程序博客网 时间:2024/06/05 16:56

PyJWT(1.4.0)

  • PyJWT是一个允许编码和解码JSON Web令牌(JWT)的Python库。JWT是一个开放的行业标准(RFC 7519),用于双方之间安全地声明。

安装

  • 你能使用pip安装PyJWT
    pip install pyjwt

  • 加密依赖关系(可选)

    • 如果你打算在编码和解码时,使用一些像RSA或者ECDSA的数字签名算法的话,你也需要安装cryptography库
      pip install cryptography
  • 传统依赖

    • 一些环境,比如最常用的Google App Engine,不允许安装需要编译C扩展名的Python包,因此无法安装加密。如果你能安装加密,你应该忽略这个部分。
    • 如果你正在部署一个应用程序到这些环境之一,你需要使用数字签名算法的传统实现。
      pip install pycrypto ecdsa
    • 一旦你已经安装了 pycrypto 和 ecdcsa,你可以在PyJWT中使用jwt.register_algorithm()。下面的示例代码将展示怎样配置PyJWT,去使用具有SHA256和EC与SHA256签名的RSA的传统实现。
      import jwtfrom jwt.contrib.algorithms.pycrypto import RSAAlgorithmfrom jwt.contrib.algorithms.py_ecdsa import ECAlgorithmjwt.register_algorithm('RS256', RSAAlgorithm(RSAAlgorithm.SHA256))jwt.register_algorithm('ES256', ECAlgorithm(ECAlgorithm.SHA256))

使用示例

  • 编码&解码 令牌
>>import jwt>>encoded = jwt.encode({'some': 'payload'}, 'secret', algorithm='HS256')'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg'
  • 指定附加标题
>>jwt.encode({'some': 'payload'}, 'secret', algorithm='HS256', headers={'kid': '230498151c214b788dd97f22b85410a5'})'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjIzMDQ5ODE1MWMyMTRiNzg4ZGQ5N2YyMmI4NTQxMGE1In0.eyJzb21lIjoicGF5bG9hZCJ9.DogbDGmMHgA_bU05TAB-R6geQ2nMU2BRM-LnYEtefwg'
  • 在没有验证的情况下,阅读声明集

    • 如果打算阅读JWT的声明集,而不对签名或任何已注册的声明名称进行验证,则可以将verify参数设置为False。

    • 注意:除非你清楚地了解你正在做什么,否则使用此功能通常是不明智的。 没有数字签名信息,声明集的完整性或真实性是不可信的。

      >>jwt.decode(encoded, verify=False){u'some': u'payload'}
  • 已经注册的声明参数

    • JWT特别定义了一些已经注册的声明参数,并且定义了它们怎样使用。PyJWT支持这些已经注册的声明参数:
      exp” (Expiration Time) Claim“nbf” (Not Before Time) Claim“iss” (Issuer) Claim“aud” (Audience) Claim“iat” (Issued At) Claim
  • 过期时间声明(exp)
    • “exp”(到期时间)声明标识JWT不得接受处理过期时间。 “exp”声明的处理要求:当前日期/时间必须在“exp”声明中列出的到期日/时间之前。 使用时可能会提供一些较小的余地,通常不超过几分钟来解决时钟偏差。 其值必须是包含NumericDate值的数字。 使用此声明是可选的。
2 0
原创粉丝点击