跳转到主要内容

JWT的证书服务支持

项目描述

ns_jwt: 证书服务用JSON Web Tokens

我们将使用RS256(公私钥)变体的JWT签名。(来源:https://pyjwt.readthedocs.io/en/latest/usage.html#encoding-decoding-tokens-with-rs256-rsa)。对于签名,假设NS拥有公私钥对。Presidio可以通过静态配置或通过查询NS上的端点来访问公钥,该端点在令牌中指定。

NS令牌包含以下声明

name description type
data-set 指向数据集的SAFE Token。Presidio能够根据数据集、项目ID和用户ID合成基于链接断言的令牌 字符串,私有
project-id CoManage/NS项目的名称,全球唯一且不同。 字符串,私有
ns-token 从NS的公钥生成的SAFE Token 字符串,私有
ns-name 人类可读的NS名称 字符串,私有
iss NS FQDN 字符串,已注册
sub OSF DCE从用户的X.509证书中的DN属性渲染 字符串,公开
exp 过期日期 日期,已注册
iat 签发日期 日期,已注册
name 主题的全名 字符串,公开

对于日期,表示从1970-01-01T00:00:00Z UTC到指定的UTC日期/时间的秒数的JSON数值,忽略闰秒。这与IEEE Std 1003.1,2013年版定义的“自纪元以来的秒数”等效,其中每天由恰好86400秒计算,除了非整数值可以被表示。有关日期/时间的一般信息和特定于UTC的信息,请参阅RFC 3339。

设置和配置

除了依赖关系(PyJWT、cryptography、python-dateutil)外,没有外部配置。

如上所述,使用虚拟环境

virtualenv -p $(which python3) venv
source venv/bin/activate
pip install --editable ns_jwt
pip install pytest

测试

简单地执行以下命令。测试依赖于在 tests/ 目录中存在 public.pemprivate.pem(RSA密钥的公钥和私钥部分)。您可以使用 tests/gen-keypair.sh 生成新的密钥对(依赖于openssl安装)。

pytest -v ns_jwt

拆卸和清理

不需要。

故障排除

由于缺少令牌末尾的base64填充,PyJWT可能无法直接解析CI登录或其他JWT,出现binascii.Error: Incorrect paddingjwt.exceptions.DecodeError: Invalid crypto padding 错误。在解码之前,将其作为字符串读取,然后添加填充。

import jwt

with open('token_file.jwt') as f:
  token_string = f.read()

jwt.decode(token_string + "==", verify=False)

可以添加任意数量的 =(至少2个)来修复填充。如果以字节字符串读取令牌,则先将其转换为 utf-8jwt_str = str(jwt_bin, 'utf-8'),然后添加填充(来源:https://gist.github.com/perrygeo/ee7c65bb1541ff6ac770

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

ns_jwt-0.1.4.tar.gz (5.2 kB 查看散列)

上传时间

构建分发

ns_jwt-0.1.4-py3-none-any.whl (5.4 kB 查看散列)

上传时间 Python 3

支持者

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