我尝试将Google Cloud Vision API与Node一起使用,并在Heroku上运行该应用程序。这个例子非常接近:
https://github.com/googleapis/nodejs-vision
但是,Google API希望通过读取包含服务帐户的文件进行身份验证,并使用环境变量读取文件的位置。有没有办法使用Heroku安全地存储此文件,或以某种方式使用Heroku Config Vars?
答案 0 :(得分:3)
NodeJS Google Auth Library的文档实际上提供了how to load credentials from environment variables的完整示例。具体来说,它说在使用类似Heroku的系统时建议采用这种方法,所以我认为你一定要看看它。
下载服务帐户的凭据后,使用以下格式,您可以按照以下步骤使用它们:
process.env['NAME_OF_YOUR_ENV_VAR'];
JSON.parse(keysVar);
GoogleAuth.fromJSON()
方法使用密钥授权请求。凭据格式:
$ export CREDS='{
"type": "service_account",
"project_id": "your-project-id",
"private_key_id": "your-private-key-id",
"private_key": "your-private-key",
"client_email": "your-client-email",
"client_id": "your-client-id",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "your-cert-url"
}'
您可以在我在第二个链接中共享的Google Auth文档(或直接在this example file中)中找到有关如何使用它们的更详细示例,因此请随意根据您的用例进行调整。方便。
答案 1 :(得分:1)
@dsesto的答案效果很好。以前,另一种解决方案是使用buildpack读取环境变量,然后将其写入文件,但是引入Heroku dot-profiles后,您可以在dyno启动时实际读取环境变量并将其写入JSON文件。这样可以使JSON文件脱离版本控制,并且AFAIK应该是安全的(如果我对此有误,请纠正我)。
# .profile
echo ${GOOGLE_CREDENTIALS} > /app/google-credentials.json
答案 2 :(得分:0)
我建议您检查这个SO问题,它可以解决上述问题,而不会给Google带来太多麻烦。 https://stackoverflow.com/a/53732919/5037755