Skip to main content

无状态 API 代理

项目描述

魔术 API 代理

这是一个无状态API 代理,允许创建和使用访问受限的API 令牌。

基本上,它是 API 令牌的身份和访问管理。

为什么这很有用?

GitHub 的 API 令牌(或其他 API,如 DigitalOcean 的)不允许对令牌可以执行的操作进行细粒度控制(请参阅此亲爱的 GitHub 问题)。例如,您基本上必须创建一个对存储库具有完全控制权的令牌,以允许令牌仅将标签应用于问题。

这可能是有问题的。当您有许多作业、流程和/或机器人与 GitHub API 交互时,您会增加令牌被破坏的可能性,并且具有广泛权限的令牌会产生非常高的后果。

此代理允许您创建具有细粒度权限的 API 令牌(魔术令牌),然后通过代理使用这些魔术令牌与 API 对话。代理验证魔术令牌是否允许执行请求的操作,然后使用真实的 API 令牌将请求转发到 API。

无国籍是什么意思?

该代理不需要后备存储,并将其所有状态存储在魔术令牌本身中。虽然插件系统允许添加一个有状态的层,如果你愿意的话。例如,允许令牌在 DNS 提供商上创建记录,然后将其删除,但不删除任何其他记录。TODO : 文档插件系统

什么?如何?

代理使用非对称加密(公钥和私钥对)和JWT将其状态编码为魔术令牌。

每个魔术令牌都是一个简单的 JWT,由代理的私钥签名,并带有以下声明:

{
  "iat": 1541616032,
  "exp": 1699296032,
  "token": "[long encrypted key]",
  "allowed": [
    "GET /user",
    "GET /repos/theacodes/nox/issues"
  ]
}

token声明是原始 API 令牌的加密版本。它使用代理的公钥加密,因此只有代理本身可以解密它(使用它的私钥)。

允许的声明决定了魔法令牌可以访问的内容。这个代理有一个基本的、基本的作用域实现,描述如下

JWT 由代理本身使用其私钥生成和签名。这意味着在不使 JWT 失效的情况下不能篡改内容。

范围界定

默认情况下,此代理具有使用以下格式的简单范围策略:

METHOD /url/pattern

WhereMETHOD可以是GET, POST,PUT等,并且/url/pattern可以是用于检查 URL 的任何正则表达式。

例如,要创建一个可以访问 中任何存储库问题的令牌someorg,您可以执行以下操作:

GET /repos/someorg/.+?/issues

用法

去做

免责声明

这是改编自 Google 内部的一个非官方项目,实验性的。这不是安全的灵丹妙药。您在使用本项目时承担所有风险。

项目详情


下载文件

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

源分布

magic-api-proxy-0.1.8.tar.gz (14.2 kB 查看哈希

已上传 source

内置分布

magic_api_proxy-0.1.8-py3-none-any.whl (20.7 kB 查看哈希

已上传 py3