【发布时间】:2017-09-07 03:59:07
【问题描述】:
我正在使用python-jose 的 JWT 实现来生成用于身份验证的 JWT 令牌。
我们在 Kubernetes 上的 Docker 容器中运行我们的后端,有时,当我们有多个 pod 时,我们会为相同的声明、秘密和算法获得不同的令牌 .当touching 我的index.wsgi 脚本时,我的开发环境中的单个容器上也发生了这种情况。
吊舱 1:
>>> jwt.encode({'key': 'value'}, 'secret', algorithm='HS256')
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ2YWx1ZSJ9.FG-8UppwHaFp1LgRYQQeS6EDQF7_6-bMFegNucHjmWg'
吊舱 2:
>>> jwt.encode({'key': 'value'}, 'secret', algorithm='HS256')
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJrZXkiOiJ2YWx1ZSJ9.JPIDicqvQ6GAh14yE2yZ3wnZQ0LiLNTTRDtJgLZcn98'
我深入研究了代码以查看可能导致此问题的原因,但没有发现任何有罪的地方。简而言之,代码的作用如下:
- 对算法头 (
{'typ': 'JWT', 'alg': 'HS256'}) 做一个json.dumps并将其编码为 Base64,删除任何=的 - 对有效载荷 (
{'key': 'value'}) 执行json.dumps并将其编码为 Base64,删除任何= - 使用带有
secret密钥的HMAC256 签名encoded_header.encoded_payload并将其编码为Base64,再次删除任何=的 - 将签名连接到前一个字符串,得到
encoded_header.encoded_payload.encoded_signature
目前,我不知道是什么原因造成的。我怀疑 Python 的 HMAC 或 SHA256 实现中存在某种错误,但这似乎不太可能......有任何线索吗?
注意:我们已经成功重现了 pyjwt 的错误,这是 python-jose 的基础。
【问题讨论】:
标签: python docker cryptography kubernetes jwt