概要
Google APIs Node.js ClientでJWTでのサービスアカウントを使用した認証を行った際にハマったことのメモです。
問題
環境変数にclient_secret.json
のprivate_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);