環境変数からprivate_keyを読み込んだ際にJWT Clientを初期化出来ない場合の対処方法

  • 4
    いいね
  • 0
    コメント

概要

Google APIs Node.js ClientでJWTでのサービスアカウントを使用した認証を行った際にハマったことのメモです。

問題

環境変数にclient_secret.jsonprivate_keyを登録し、それをコードからprocess.envで参照して認証に使用しました。

const jwtClient = new google.auth.JWT(
    process.env.SERVICE_ACCOUNT_EMAIL,
    null,
    process.env.SERVICE_ACCOUNT_KEY,
    ['https://www.googleapis.com/auth/drive'],
    null);

このコードで上手く行きそうなのですが、実際には以下のようなエラーが出て上手く認証ができませんでした。

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line

private_keyをハードコーディングした場合には問題なく認証できており、keyが間違っている訳ではありませんでした。

解決策

環境変数から読み込んだprivate_keyの改行コードを.replace(/\\n/g, '\n')で置き換えることで解決しました。

コードは以下の通りです。

const jwtClient = new google.auth.JWT(
    process.env.SERVICE_ACCOUNT_EMAIL,
    null,
    process.env.SERVICE_ACCOUNT_KEY.replace(/\\n/g, '\n'),
    ['https://www.googleapis.com/auth/drive'],
    null);