デフォルトの認証情報ファイルを使用せずに Google サービス アカウントを認証するにはどうすればよいですか?
概要
アプリが Google Analytics からデータを取得するために使用する Google サービス アカウントがあります。
アカウントを作成したとき、OAuth による認証に必要なすべての情報を含む client_secrets ファイルをダウンロードし、Google のドキュメントに従って GOOGLE_APPLICATION_CREDENTIALS という環境変数にこのファイルへのパスを記録しました。
次のように認証されたクライアントを取得できるようになりました。
authorization = Google::Auth.get_application_default(scopes)
このメソッドはファイルから資格情報を読み取り、ローカルで機能しますが、私のアプリはファイルストレージが不可能な Heroku でホストされています。
ドキュメントには、このファイルを提供できる (できない)、公式の Google サービスでアプリを実行できる (できない)、またはエラーが発生するかのいずれかが記載されています。
client_secrets ファイルを使用せずにサービス アカウントを認証するにはどうすればよいですか?
解決策
答えは google-auth-library-ruby gem のソース コードで見つかりました。
client_secrets ファイルから値を取得し、それぞれ GOOGLE_ACCOUNT_TYPE、GOOGLE_CLIENT_ID、GOOGLE_CLIENT_EMAIL、GOOGLE_PRIVATE_KEY という名前の環境変数に入れるという別のオプションがあることがわかりました。
これらのキーが設定されている場合、資格情報はそこからロードされます。ただし、ドキュメントではこれについてささやかれていません。