我正在构建与 Google URL Shortening API(在 Ruby 中)的集成。根据他们的instructions在使用 OAuth2 进行身份验证时,您需要定义一个环境变量 GOOGLE_APPLICATION_CREDENTIALS
,这是包含您的服务帐户凭据的 JSON/P12 文件的路径。
我想知道的是如何正确存储我的凭据而不将它们提交给源代码管理。我可以选择使用凭据提交 JSON 文件,因为存储库是私有(private)的,但这听起来像是不好的做法。
最佳答案
我在授权 Google 日历时遇到了同样的问题。
首先,让我澄清/重申这个问题,因为似乎有些困惑(即它不像“设置环境变量”那么简单)。
背景
谷歌的 Application Default Credentials希望您设置 GOOGLE_APPLICATION_CREDENTIALS
的环境变量,它指向包含您的服务帐户凭据的 JSON 文件。
问题
我们设置环境变量的标准解决方案不适用于此模式。我们需要以某种方式引用环境变量在静态 JSON 文件中。那么我们该怎么做呢?
解决方案
原来是 google-auth-library-ruby 的维护者已经解决了这个问题。 Reviewing the source code ,您会发现您可以:
- 将
GOOGLE_APPLICATION_CREDENTIALS
设置为指向 JSON 文件。 - 设置三个独立的环境变量:
GOOGLE_PRIVATE_KEY
、GOOGLE_CLIENT_EMAIL
和GOOGLE_ACCOUNT_TYPE
。
在选项 2 中,如果所有三个变量都存在,google-auth-library-ruby将处理剩下的事情——不需要 JSON 文件。
陷阱
- 如果您使用上面的选项 2,请确保未设置
GOOGLE_APPLICATION_CREDENTIALS
。如果设置了GOOGLE_APPLICATION_CREDENTIALS
,google-auth-library-ruby将支持它,选项 2 将不起作用。 GOOGLE_PRIVATE_KEY
是一个多行密文。设置多行配置变量可能很棘手(至少在 Heroku 上)。例如,换行符(即\n
)可能会由于双重转义而变得困惑。我不得不 follow these instructions from StackOverflow .
关于ruby - Google API OAuth 2.0 如何存储应用程序默认凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34360932/