JWT对Cromlech的支持

cromlech.jwt的Python项目详细描述


用于Web应用程序的JSON WebTokens实用程序。 可以生成和验证签名和加密的令牌,有无 储存或自嘲。

先决条件

为了使用加密功能,我们创建了一个加密密钥。 需要存储此密钥才能在应用程序中重用。确保它是 存储在一个安全的地方作为令牌依赖于这个被认为是“安全的”。

>>> from cromlech.jwt.components import JWTHandler
>>> key = JWTHandler.generate_key()

请在此处阅读更多信息:http://jwcrypto.readthedocs.io。 可用的密钥生成选项:密钥类型、大小。

您可以从键值和类型加载键:

>>> key_string = JWTHandler.dump_key(key)
>>> key = JWTHandler.load_key(key_string)

处理程序

handler类是第一层实用程序的载体。 可以将处理程序实例配置为生成自毁令牌。

默认情况下,令牌没有过期时间。没有到期日期的令牌可以是 存储和管理在您自己的应用程序层中,实现您自己的 超时机制和策略。

>>> handler = JWTHandler()
>>> data = {"user": "Cromlech User"}
>>> payload = handler.create_payload(**data)
>>> sorted(payload.items())  # doctest: +ALLOW_UNICODE
[('uid', '...'), ('user', 'Cromlech User')]

配置超时将触发过期时间的创建。 超时是一个整数,表示以分钟为单位的寿命。

>>> handler = JWTHandler(auto_timeout=60)
>>> payload = handler.create_payload(**data)
>>> sorted(payload.items())  # doctest: +ALLOW_UNICODE
[('exp', ...), ('uid', '...'), ('user', 'Cromlech User')]

注意,默认情况下会创建uid属性。基本策略是创建 基于uuid的uid(这里是uuid4)。您可以在 子类。

服务

服务类为处理程序提供了一个包装器,以简化 操作。它允许您配置处理程序、生成和验证。 此外,如果您愿意的话,它还有一个骨架结构来存储和刷新 创建自己的令牌策略。

>>> from cromlech.jwt.components import JWTService
>>> service = JWTService(key, JWTHandler)
>>> service.handler.auto_timeout
60
>>> import six
>>> token = service.generate(data)
>>> assert isinstance(token, six.string_types)
>>> import json
>>> token_data = handler.decrypt_and_verify(key, token)
>>> sorted(json.loads(token_data).items())  # doctest: +ALLOW_UNICODE
[('exp', ...), ('uid', '...'), ('user', 'Cromlech User')]
>>> auth_data = service.check_token(token)
>>> sorted(auth_data.items())  # doctest: +ALLOW_UNICODE
[('exp', ...), ('uid', '...'), ('user', 'Cromlech User')]
>>> import pytest
>>> from cromlech.jwt.components import InvalidToken
>>> with pytest.raises(InvalidToken) as invalid:
...     service.check_token(token + 'some_altering_data')

我们可以重写有效载荷自动生成的数据,以获得灵活性:

>>> data = {"user": "Cromlech User", "uid": "My Own ID"}
>>> token = service.generate(data)
>>> token_data = handler.decrypt_and_verify(key, token)
>>> sorted(json.loads(token_data).items())  # doctest: +ALLOW_UNICODE
[('exp', ...), ('uid', 'My Own ID'), ('user', 'Cromlech User')]

这样,我们就创建了一个有意弃用的令牌来测试:

>>> from cromlech.jwt.utils import get_posix_timestamp, expiration_date
>>> deprecated = get_posix_timestamp(expiration_date(-60))
>>> data = {"user": "Cromlech User", "exp": deprecated}
>>> token = service.generate(data)
>>> from cromlech.jwt.components import ExpiredToken
>>> with pytest.raises(ExpiredToken):
...     token_data = handler.decrypt_and_verify(key, token)

注意,如果您的处理程序未配置为自嘲,则添加 有效负载的到期日期将生成错误:

>>> service = JWTService(key, JWTHandler, auto_deprecate=False)
>>> deprecated = get_posix_timestamp(expiration_date(60))
>>> data = {"user": "Cromlech User", "exp": deprecated}
>>> from cromlech.jwt.components import InvalidPayload
>>> with pytest.raises(InvalidPayload) as payload_error:
...     token = service.generate(data)
>>> payload_error.value
InvalidPayload('Expiration is not allowed.',)

更改

0.1(2018-08-27)

  • Initial release

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java设置JFrame中可见空间的大小   java onCreate on fragment总是从错误的位置开始   java我应该使用AOP来解决这个横切问题吗?   Android全局变量java。lang.NullPointerException   java获取hibernate select查询的结果计数(返回对象的查询未选择计数(*))   java错误:(32,13)错误:无法访问javax的可引用类文件。命名。找不到可引用的   java如何在Eclipse中创建方形编辑器选项卡(无swtborderradius)?   带公式的java Apache POI颜色单元格   Java中的右移运算符功能   Java Selenium TestNG:框架(一个项目)被另一个项目使用时出现的问题   音频转换为Java特定格式的Wav文件   java从url显示图像,ImageView不起作用,WebView起作用   java格式化要输出到YML的字符串列表   java如何使用密码读取私钥?