【发布时间】:2017-04-26 15:00:33
【问题描述】:
如何将 API 密钥存储在我将上传到 PyPI 的代码中?我不希望人们能够下载原始包文件并查看 API 密钥。
【问题讨论】:
-
那么你为什么要把它们存储在那里呢?
-
请检查我的回答。如果您需要更多解释,请发表评论,我很乐意提供帮助。
标签: python api python-3.x pypi
如何将 API 密钥存储在我将上传到 PyPI 的代码中?我不希望人们能够下载原始包文件并查看 API 密钥。
【问题讨论】:
标签: python api python-3.x pypi
在我看来,您的应用程序架构是错误的。
据我了解,可能有 2 种情况。
您在应用程序中使用的 API 密钥适用于第 3 方 API。
在这种情况下,您应该要求用户生成他们自己的 API 密钥并使用这些 API 密钥初始化您的应用以使用您的模块。
这就是 twitter/Google/Github 以及大多数其他 python 模块的工作方式。
例如:https://github.com/inueni/birdy
from birdy.twitter import UserClient
client = UserClient(CONSUMER_KEY,
CONSUMER_SECRET,
ACCESS_TOKEN,
ACCESS_TOKEN_SECRET)
在这种情况下,您应该为用户提供一个端点来生成 API 密钥并再次使用它来初始化模块。
为什么要这样做?
拥有 API 密钥而不是公开可用的开放端点的全部意义在于安全性。您应该能够单独限制那些用请求轰炸您的 API 密钥。
如果您有 1 个 API 密钥用于所有模块下载,则该模块的每个用户都将使用相同的 api 密钥。你将无法扼杀任何人。
也没有安全性(下载模块的任何人都可以看到密钥)。
要更改 API 密钥,您必须更新模块并重新部署。并且您模块的所有用户都必须 pip upgrade 才能使用您的模块。
【讨论】: