'ServiceAccountCredentials.from_json_keyfile_name'与远程json等效

0h4hbjxa  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(130)

我正在设置一个程序来帮助用户记录研究论文的笔记,我需要将client_secret.json与程序文件分离,以确保其在线安全。我如何从JSON中获取creds,而不需要将其作为python程序的文件?

scope = ["https://spreadsheets.google.com/feeds","https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
gs = gspread.authorize(creds)

字符串
在上面的代码中,有没有一些方法可以使用json响应而不是client_secret.json文件,比如:

creds = requests.get("json storage").json

vnzz0bqm

vnzz0bqm1#

最好的方法是将secret JSON的密钥创建为环境变量,并使用一个函数返回与json相同格式的dict,然后可以与auth方法from_json_keyfile_dict一起使用
这就是我如何做的,以及我如何调用我的环境变量:

def create_keyfile_dict():
    variables_keys = {
        "type": os.environ.get("SHEET_TYPE"),
        "project_id": os.environ.get("SHEET_PROJECT_ID"),
        "private_key_id": os.environ.get("SHEET_PRIVATE_KEY_ID"),
        "private_key": os.environ.get("SHEET_PRIVATE_KEY"),
        "client_email": os.environ.get("SHEET_CLIENT_EMAIL"),
        "client_id": os.environ.get("SHEET_CLIENT_ID"),
        "auth_uri": os.environ.get("SHEET_AUTH_URI"),
        "token_uri": os.environ.get("SHEET_TOKEN_URI"),
        "auth_provider_x509_cert_url": os.environ.get("SHEET_AUTH_PROVIDER_X509_CERT_URL"),
        "client_x509_cert_url": os.environ.get("SHEET_CLIENT_X509_CERT_URL")
    }
    return variables_keys

# then the following should work

scope = ["https://spreadsheets.google.com/feeds","https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_dict(create_keyfile_dict(), scope)
gs = gspread.authorize(creds)

字符串

xghobddn

xghobddn2#

菲利普的回答是正确的,但对我来说不太管用。
我不得不更改create_keyfile_dict方法,将.replace("\\n", "\n")添加到private_key
这是我的最终结果:

def create_keyfile_dict():
    variables_keys = {
        "type": os.environ.get("SHEET_TYPE"),
        "project_id": os.environ.get("SHEET_PROJECT_ID"),
        "private_key_id": os.environ.get("SHEET_PRIVATE_KEY_ID"),
        "private_key": os.environ.get("SHEET_PRIVATE_KEY").replace("\\n", "\n"),
        "client_email": os.environ.get("SHEET_CLIENT_EMAIL"),
        "client_id": os.environ.get("SHEET_CLIENT_ID"),
        "auth_uri": os.environ.get("SHEET_AUTH_URI"),
        "token_uri": os.environ.get("SHEET_TOKEN_URI"),
        "auth_provider_x509_cert_url": os.environ.get("SHEET_AUTH_PROVIDER_X509_CERT_URL"),
        "client_x509_cert_url": os.environ.get("SHEET_CLIENT_X509_CERT_URL"),
    }
    return variables_keys

# Google Sheet credentials
credentials = ServiceAccountCredentials.from_json_keyfile_dict(
    create_keyfile_dict(),
    ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"],
)
client = gspread.authorize(credentials)

字符串

相关问题