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

标签 ruby oauth-2.0 google-api google-authentication

我正在构建与 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 ,您会发现您可以:

  1. GOOGLE_APPLICATION_CREDENTIALS 设置为指向 JSON 文件。
  2. 设置三个独立的环境变量:GOOGLE_PRIVATE_KEYGOOGLE_CLIENT_EMAILGOOGLE_ACCOUNT_TYPE

在选项 2 中,如果所有三个变量都存在,google-auth-library-ruby将处理剩下的事情——不需要 JSON 文件。

陷阱

  1. 如果您使用上面的选项 2,请确保未设置 GOOGLE_APPLICATION_CREDENTIALS。如果设置了 GOOGLE_APPLICATION_CREDENTIALSgoogle-auth-library-ruby将支持它,选项 2 将不起作用。
  2. GOOGLE_PRIVATE_KEY 是一个多行密文。设置多行配置变量可能很棘手(至少在 Heroku 上)。例如,换行符(即 \n)可能会由于双重转义而变得困惑。我不得不 follow these instructions from StackOverflow .

关于ruby - Google API OAuth 2.0 如何存储应用程序默认凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34360932/

相关文章:

c++ - 多次调用 ruby​​_init 和 ruby​​_finalize

google-chrome - 浏览器如何处理OAuth2中的redirect_uri?

oauth-2.0 - 未定义身份验证 session

google-api - 如何通过一键登录流程使用适用于 JavaScript 的 Google API 客户端?

ruby - Ruby 中对象的哈希/数组

ruby - 从几个哈希生成每个组合

oauth-2.0 - 使用身份服务器 3.0 和 oAuth 2.0 时如何跨多个应用程序(Web/移动)共享 JWT token

javascript - Google Places 自动完成下拉菜单不可见

javascript - Google API 地理编码 OVER_QUERY_LIMIT ,每秒 5 个地址?

ruby - 如何向url添加额外的参数? - 编码网址