ローソンデジタルイノベーション テックブログ

ローソンデジタルイノベーション(LDI)の技術ブログです

Cloud Functions でのJWT対応方法の紹介

ローソンデジタルイノベーション(LDI)のiOS/Android開発マネージャーの阪口です。

今回は、Cloud Functions でのJWT(JSON Web Token)を利用した認証処理について紹介します!

はじめに

前回こちらの記事で、Cloud Functions と Cloud Firestore の社内利用例について紹介しました。

techblog.ldi.co.jp

今回は、Cloud Functions のAPIをセキュリティ強化するためにJWTを利用した認証処理について紹介します。

対応方法

在宅勤務報告システムでは、Firebase Authentication を利用して認証管理をしています。

Cloud Functions でも Firebase Authentication を利用してJWTを利用した認証処理を実現しました。

const functions = require("firebase-functions");
const admin = require("firebase-admin");
const db = admin.firestore();
const minInstancesConfig = 1; // 最小インスタンス数

exports.onRequest = functions.region('asia-northeast1').runWith({
    minInstances: minInstancesConfig,
}).https.onRequest((request, response) => {

    response.set('Access-Control-Allow-Headers', '*');
    response.set("Access-Control-Allow-Origin", "*");

    const json = JSON.parse(request.body.data); // ①

    // JWT対応のコード
    try {
        const decoded = admin.auth().verifyIdToken(json.idToken); // ②
    } catch (e) {
        // ③
        response.sendStatus(404);
        return
    }

    // ④

  });

① ... リクエストのJSONを取得

② ... Firebase Authentication の verifyIdToken でユーザー認証

(リクエストの idToken は Firebase Authentication で取得した idToken を設定してリクエストされることを想定)

③ ... 認証に失敗した場合は、404エラーを返却

④ ... 認証に成功した場合は、後続処理を実行

最後に

Firebase Authentication を利用することで簡単にJWT対応をすることができました。

また、JWTを利用した認証処理を対応することでセキュリティが強化され、万が一不正アクセスが発生してもJWTのユーザー認証でアクセスを防ぐことができるため、安全な環境で公開することができます。

LDIに興味が出てきた方、または応援いただける方は是非「読者になる」で応援していただけますと嬉しいです!