🌊
Node.jsのGoogleAPIのライブラリの認証部分がCloudflare Workersで使えないので代替を探してみた
Hono x Cloudflare WorkersでGoogleAPIのライブラリを使用しようとしたら認証時にエラーになったので代替案を探して対処しました。
ざっくりまとめ
- HonoでGoogleAPIをサービスアカウントの認証を使用してカレンダーのデータを取得したかった
- 実行環境はCloudflare Workers
- ライブラリ内のNode.jsの処理がCloudflare Workersで使えないのでエラーが出る
- Node.jsに依存していない認証処理をしているライブラリ発見
- ライブラリを使用してカレンダーのデータを取得できた
HonoでGoogleAPIをサービスアカウントの認証で使用してカレンダーのデータを取得したかった
サービスアカウントを作成して以下のように認証処理をしてサクッとライブラリを使いたかったです。
const auth = new google.auth.GoogleAuth({
credentials: JSON.parse(env.GCP_SERVICE_ACCOUNT),
scopes: ["https://www.googleapis.com/auth/cloud-platform"],
});
が、これだとGoogleAuth()の内部処理の一部がCloudflare Workersで使えないのでエラーになります。
crypto.createSign
が使えないというエラーになります。
cryptoはCloudflareでは部分的にしか使えない状況です。
代替案を探してみる
自分以外にも同じような問題を抱えている人がいたので調べてみました。
Node.jsに依存していないライブラリを見つけました。
ライブラリを使用してカレンダーのデータを取得できた
ドキュメント通りにコードを書いて実行したところ、問題なく認証&データ取得ができました。
const scopes = ["https://www.googleapis.com/auth/calendar.readonly"];
const googleAuth: GoogleKey = JSON.parse(env.GCP_SERVICE_ACCOUNT);
const oauth = new GoogleAuth(googleAuth, scopes);
const token = await oauth.getGoogleAuthToken();
const calendar = google.calendar({ version: "v3" });
const res = await calendar.events.list({
calendarId: env.GOOGLE_CALENDER_ID,
timeMin: xxx,
timeMax: xxx,
singleEvents: true,
orderBy: "startTime",
oauth_token: token,
});
Discussion