【发布时间】:2020-06-17 11:30:23
【问题描述】:
到目前为止,每当我需要为简单的 python 应用程序存储“秘密”时,我都依赖于环境变量。在 Windows 中,我通过计算机属性对话框设置变量,然后在我的 Python 代码中访问它们,如下所示:
database_password = os.environ['DB_PASS']
这种方法的简单性对我很有帮助。现在我有一个使用 Oauth2 身份验证的项目,我需要将令牌存储到可能在整个程序执行过程中发生变化的环境中。我希望它们在我下次执行程序时持续存在。这是我想出的:
#fetch a new token
token = oauth.fetch_token('https://api.example.com/oauth/v2/token', code=secretcode)
access_token = token['access_token']
#make sure it persists in the current session
os.environ['TOKEN'] = access_token
#store to the system environment (Windows)
cmd = 'SETX /M TOKEN ' + access_token
os.system(cmd)
今天它为我快速完成了工作,但似乎不是添加到我的工具箱的正确方法。有没有人有一种更优雅的方式来做我想做的事情,不会增加太多的复杂性?如果解决方案跨平台工作,那将是一个奖励。
【问题讨论】:
-
我发现使用 json 文件来存储您的令牌或密码很容易。如果您有 20 个不同的令牌或数据库密码,那么您将拥有那么多环境变量。但是使用 josn,您将拥有一个很好的字典结构,您可以在其中正确并相应地命名您的键。只需读取 json 并检索数据。 json文件的读写不要太复杂
-
您可以考虑使用temporary files 或Registry(当然仅限Windows)。
-
@Buckeye14Guy 谢谢。您是否以任何方式加密文件或其中的变量?
-
是的,我只是使用密码学模块来加密我的东西。我生成了一个密钥,该密钥可以存储在任何地方,甚至可以作为环境变量存储。一把钥匙虽然不太安全,但还是很安全的。
标签: python oauth environment-variables access-token