跳转到主要内容

用于管理签名认证令牌的通用库。

项目描述

这是一个基于令牌的认证的通用支持库。您可以使用它来构建使用携带令牌、双端OAuth或MAC访问认证的登录系统。

给定服务器端的密钥,您可以序列化数据字典到一个不透明、不可伪造的认证令牌

>>> token = tokenlib.make_token({"userid": 42}, secret="I_LIKE_UNICORNS")
>>> print token
eyJzYWx0IjogImY0NTU5NCIsICJleHBpcmVzIjogMTMyOTg3NTI2Ny4xNDQ5MzUsICJ1c2VyaWQiOiA0Mn0miXCe4NQQtXTE8NXSGcsL6dzSuQ==

稍后,您可以使用相同的密钥验证令牌并提取嵌入的数据

>>> data = tokenlib.parse_token(token, secret="I_LIKE_UNICORNS")
>>> print data
{u'userid': 42, u'expires': 1329875384.073159, u'salt': u'1c033f'}

请注意,数据包括过期时间。如果您尝试解析过期令牌,它将失败

>>> # Use now=XXX to simulate a time in the future.
>>> tokenlib.parse_token(token, secret="I_LIKE_UNICORNS", now=9999999999)
Traceback (most recent call last):
...
ValueError: token has expired

同样,如果令牌是用不匹配的密钥构造的,它也会失败

>>> tokenlib.parse_token(token, secret="I_HATE_UNICORNS")
Traceback (most recent call last):
...
ValueError: token has invalid signature

每个令牌还有一个相关的“令牌密钥”。这是一个可以与令牌的消费者共享的秘密密钥,用于启用如MAC访问认证和双端OAuth等认证方案

>>> key = tokenlib.get_token_secret(token, secret="I_LIKE_UNICORNS")
>>> print key
EZslG8yEYTGyDvBjRnxGipL5Kd8=

对于反复使用相同设置的程序,您可能希望创建一个TokenManager对象,而不是使用模块级别的便捷函数

>>> manager = tokenlib.TokenManager(secret="I_LIKE_UNICORNS")
>>> data = manager.parse_token(token)
>>> print data
{u'userid': 42, u'expires': 1329875384.073159, u'salt': u'1c033f'}

这将允许您自定义例如令牌过期超时或哈希模块,而不必在每次调用中重复设置。

2.0.0 - 2017-12-20

  • 兼容Py27, Py35

0.3.1 - 2014-01-08

  • 将tokenlib.DEFAULT_HASHMOD改为字符串。

  • 修复了偶尔失败的测试。

0.3.0 - 2014-01-08

  • 澄清了许可信息

  • 改为使用sha256作为默认哈希算法

  • get_token_secret重命名为get_derived_secret以明确其目的;旧名称仍然保留,但已弃用。

  • 添加了自定义ValueError子类以实现更精细的错误报告。

0.2.0 - 2012-11-27

  • 通过源级兼容性支持python3

0.1.0 - 2012-03-14

  • 初始版本。

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面