OpenSSL.crypto.Error: [] в попытке SignedJwtAssertionCredentials

Я пытаюсь войти в систему с помощью SignedJwtAssertionCredentials, чтобы заставить gspread работать. Я следовал указаниям здесь с примечаниями для python3. Вот мой класс:

import json
import gspread
from oauth2client.client import SignedJwtAssertionCredentials

    class GoogleSpreadsheet():
        def fetch(self):
            gc = gspread.authorize(self.credentials)
            wks = gc.open("TEST of Sheet (Responses)").sheet1
            print(wks)

        def __init__(self, client_email,pk):
                scope = ['https://spreadsheets.google.com/feeds']
                self.credentials = SignedJwtAssertionCredentials(client_email, bytes(pk, 'utf-8'), scope)

при этом client_email и pk передаются из переменных среды:

gs = GoogleSpreadsheet(app.config.get('GOOGLE_SPREADSHEET_CLIENT_EMAIL'), app.config.get('GOOGLE_SPREADSHEET_PK'))

Переменная среды копируется из json-файла авторизации Google:

export GOOGLE_SPREADSHEET_PK="-----BEGIN PRIVATE KEY-----\n...\n...keystuff...\n...\n-----END PRIVATE KEY-----\n"

Ошибка при каждой попытке с OpenSSL.crypto.Error: []

Предложение здесь Ошибка загрузки закрытого ключа с OpenSSL.crypto.Error: [] не помогло, так как мой ключ не зашифрован.

Какие-либо предложения?


person Chris    schedule 10.07.2015    source источник


Ответы (1)


С некоторой помощью из этой темы: https://github.com/google/oauth2client/issues/193 и немного возни, похоже, вам нужно превратить \n в закрытом ключе в настоящие новые строки, если вы не загружаете файл конфигурации через JSON.load (что делает учебник по gsheets).

person Chris    schedule 10.07.2015
comment
Я нашел этот ответ (stackoverflow.com/a/25435674/888970) полезным для иллюстрации того, что именно подразумевается под использованием json.load. - person Rahul Gupta-Iwasaki; 17.12.2015
comment
Этот ответ был ключевым. - person Declan; 18.03.2017
comment
для тех, кто пытается прочитать закрытый ключ из файла .env, это решило мою проблему: PRIVATE_KEY = os.getenv('PRIVATE_KEY', "").replace('\\n', "\n") - person Alucarder; 11.02.2021