为Python脚本存储应用程序机密(密码,访问令牌)的最简单方法是什么?我认为它是像Ruby中的*.yml
文件但令人惊讶的是我发现事实并非如此。那么它是什么呢?什么是最简单的解决方案?
我想将它们放在单独的文件中,因为这样我无法将该文件推送到github存储库。
答案 0 :(得分:36)
我认为将凭据存储在另一个* py文件中是最安全的选择。然后只需导入它。示例看起来像这样
config.py
username = "xy"
password = "abcd"
main.py
import config
login(config.username, config.password)
答案 1 :(得分:3)
我在处理完全相同的问题,实际上得到了与 kecer 建议的解决方案相同的解决方案。由于需要使用数十个脚本,因此我创建了自己的库。让我与您分享这个解决方案。
credlib.py -处理凭证的通用库
class credential:
def __init__(self, hostname, username, password):
self.hostname = hostname
self.username = username
self.password = password
mycredentials.py -我的本地文件,用于存储所有凭据
from credlib import credential
sys_prod = credential("srv01", "user", "pass")
sys_stg = credential("srv02", "user", "pass")
sys_db = credential("db01", "userdb", "passdb")
mysystemlib.py -这是访问我的系统的常规库(支持新的凭据系统和旧版)
from credlib import credential
def system_login(*args): # this is new function definition
#def system_login(hostname, username, password): # this was previous function definition
if len(args) == 1 and isinstance(args[0], credential):
hostname = args[0].hostname
username = args[0].username
password = args[0].password
elif len(args) == 3:
hostname = args[0]
username = args[1]
password = args[2]
else:
raise ValueError('Invalid arguments')
do_login(hostname, username, password) # this is original system login call
main.py -结合了凭证和系统库的主脚本
from mycredentials import sys_stg, sys_db
import mysystemlib
...
mysystemlib.system_login(sys_stg)
请注意,旧版主机名/用户名/密码仍然有效,因此不会影响旧脚本:
mysystemlib.system_login("srv02", "user", "pass")
这有很多好处:
.gitignore
排除在外),这样我们的python脚本/库就可以与其他人共享而无需暴露凭据(每个人都在本地文件中定义自己的凭据)答案 2 :(得分:2)
我个人更喜欢将yaml文件与pyyaml库一起使用。 这里的文档:https://pyyaml.org/wiki/PyYAMLDocumentation
创建.gitignore
规则非常快捷,轻松,并且犯错的机会为零。