Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

概要

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);
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away