ローソンデジタルイノベーション(LDI)のiOS/Android開発マネージャーの阪口です。
今回は、Cloud Functions でのJWT(JSON Web Token)を利用した認証処理について紹介します!
はじめに
前回こちらの記事で、Cloud Functions と Cloud Firestore の社内利用例について紹介しました。
今回は、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に興味が出てきた方、または応援いただける方は是非「読者になる」で応援していただけますと嬉しいです!