Cromlech的JWT支持
项目描述
为Web应用程序提供JSON Web Tokens实用工具。可以生成和验证签名和加密令牌,是否存储或自弃。
先决条件
为了使用加密功能,我们创建一个加密密钥。此密钥需要存储以便在您的应用程序中重复使用。请确保将其存储在安全的地方,因为令牌依赖于这一点才能被认为是“安全的”。
>>> 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 = 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>>> token = service.generate(data)>>> 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.2.1 (2022-10-24)
文档更新
0.2 (2022-10-24)
针对 jwcrypto >= 1.4 进行更新
0.1 (2018-08-27)
初始发布
项目详情
关闭
cromlech.jwt-0.2.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a9e3fdf93e2a9a69c11968f54ff5c72fc738b86650ce3da8ee0b82d02048c1cb |
|
MD5 | 9224ce7f71ec4398a7da4b18ff9be74c |
|
BLAKE2b-256 | b9346295299acfab32981b31f3bb9d1c089588c524aaf6031b24f3df910cf36f |