Google API OAuth 2.0 如何存储应用程序默认凭据

Dan*_*ell 4 ruby google-api google-authentication oauth-2.0

我正在构建与 Google URL Shortening API(使用 Ruby)的集成。根据他们有关使用 OAuth2 进行身份验证的说明,您需要定义一个环境变量,GOOGLE_APPLICATION_CREDENTIALS该变量是带有服务帐户凭据的 JSON/P12 文件的路径。

我想知道的是如何正确存储我的凭据而不将它们提交给源代码管理。我可以选择使用凭据提交 JSON 文件,因为存储库是私有的,但这听起来像是不好的做法。

Cor*_*res 5

我在授权 Google 日历时遇到了同样的问题。

\n\n

首先,让我澄清/重述问题,因为似乎存在一些混乱(即它不像“设置环境变量”那么简单)。

\n\n

背景

\n\n

Google 的应用程序默认凭据希望您设置一个环境变量,该变量GOOGLE_APPLICATION_CREDENTIALS指向包含您的服务帐户凭据的 JSON 文件。

\n\n

问题

\n\n

我们设置环境变量的标准解决方案不适用于这种模式。我们需要以某种方式引用静态 JSON 文件中的环境变量。那么我们该怎么做呢?

\n\n

解决方案

\n\n

事实证明google-auth-library-ruby的维护者已经解决了这个问题。查看源代码,您将发现您可以:

\n\n
    \n
  1. 设置GOOGLE_APPLICATION_CREDENTIALS为指向 JSON 文件。
  2. \n
  3. 设置三个单独的环境变量:GOOGLE_PRIVATE_KEYGOOGLE_CLIENT_EMAILGOOGLE_ACCOUNT_TYPE
  4. \n
\n\n

在选项 2 中,如果所有三个变量都存在,google-auth-library-ruby将处理其余的 \xe2\x80\x93 不需要 JSON 文件。

\n\n

陷阱

\n\n
    \n
  1. 如果您使用上面的选项 2,请确保GOOGLE_APPLICATION_CREDENTIALS未设置。如果GOOGLE_APPLICATION_CREDENTIALS设置了,google-auth-library-ruby将支持它,并且选项 2 将不起作用。
  2. \n
  3. GOOGLE_PRIVATE_KEY是一个多行秘密。设置多行配置变量可能很棘手(至少在 Heroku 上)。例如,换行符(即\\n)可能会由于双重转义而变得混乱。我必须遵循 StackOverflow 的这些说明
  4. \n
\n