用于管理签名身份验证令牌的通用库。

tokenlib的Python项目详细描述


这是用于执行基于令牌的身份验证的通用支持库。你 可以使用它来构建使用承载令牌、双腿oauth或 MAC访问身份验证。

给定一个服务器端主密钥,您可以将数据的dict序列化为 不透明、不可伪造的身份验证令牌:

>>> 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

每个令牌还具有关联的“令牌机密”。这是一把秘密钥匙 可以与令牌的使用者共享以启用身份验证方案 如双腿OAuth的MAC访问认证:

>>> 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 compliant

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年3月14日

  • Initial release.

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

推荐PyPI第三方库


热门话题
java为什么我们不能将ArrayList<Integer>传递给具有(Integer…)的方法参数   java Spring RestTemplate映射JSON对映射的响应引发不匹配的PutException   在系统中找到java Selenium元素,但在Jenkins中未找到   java在Android中使用JavaMail API发送电子邮件,而不使用默认/内置应用程序   数组如何在Java数据结构中同时存储数字和相应的单词?   为什么“+”运算符未定义?JAVA   java如何在游戏中添加高分系统?   java在球门碰撞中区分球和球员   java如何使用SpringSecurity4.0.1使用Auth令牌实现Rest完整Web服务。释放   java如何解决这个错误:Android资源链接失败?   java多线程文件处理和数据库批插入   导致Tomcat失败的java无用块线程   java主线程做了太多的工作,尽管我使用了异步线程(laggy UI)   在Java FX 2.0中滚动锚定节点时,锚定始终可见?   java使用EJB3中的客户机jar和设计模式