Google 未在 Heroku 暂存帐户上正确检索到身份验证凭据

Google Auth credentials not retrieved properly on Heroku staging account

我们没有在服务器上存储凭据文件,而是选择使用环境变量来存储所需的信息:

GOOGLE_CLIENT_ID
GOOGLE_CLIENT_EMAIL
GOOGLE_ACCOUNT_TYPE
GOOGLE_PRIVATE_KEY

我们正在为 CalendarService 获取授权,如下所示:

scopes = ["https://www.googleapis.com/auth/calendar"]
auth = ::Google::Auth.new_application_credentials(scopes)
service = ::Google::Apis::CalendarV3::CalendarService.new
service.authorization = auth
service.authorization.fetch_access_token!

流程的每个部分都在本地工作——授权、获取访问令牌、与 API 交互等。当我们部署到 Heroku 上的暂存环境时,我们无法克服以下错误:

Unable to read the credential file specified by GOOGLE_APPLICATION_CREDENTIALS: Neither PUB key nor PRIV key: nested asn1 error

我在测试中看到了这个错误,所以我知道它可能与 或者 丢失的凭据文件相关(如错误所示)OR 到无效的 ID、私钥或电子邮件组合(因为我不小心用无效值替换了私钥)。在那种情况下,错误消息是相同的。

我们已验证所有变量都与本地使用的凭据相匹配 - 我错过了什么?

确保正确设置 GOOGLE_PRIVATE_KEY 变量。

在 Heroku 上设置多行配置变量你需要 运行:

heroku config:add GOOGLE_PRIVATE_KEY="$(cat private_key_file)"

将密钥存储在新文件中并使用 cat 的替代方法是使用 printf

heroku config:add GOOGLE_PRIVATE_KEY="$(printf "-----BEGIN PRIVATE KEY.....")"