在Heroku登台帐户中无法正确检索Google Auth凭据

时间:2016-03-24 13:55:03

标签: ruby-on-rails-4 heroku google-calendar-api google-authentication

我们选择使用env vars来存储所需的信息,而不是在服务器上存储凭据文件:

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,私有密钥或电子邮件组合(因为我不小心用无效值替换了私钥)。在这种情况下,错误消息是相同的。

我们已经验证所有vars与本地使用的凭据相匹配 - 我缺少什么?

2 个答案:

答案 0 :(得分:5)

确保您正确设置了GOOGLE_PRIVATE_KEY变量。

在Heroku上设置一个需要运行的多行配置变量:

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

答案 1 :(得分:1)

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

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