AIイノベーションズ

Firebase Admin SDKでIDトークンを検証する

Firebaseでは、サーバーのFirebase Admin SDKを利用するときに、クライアントで取得したIDトークンをサーバーに渡すことでリクエスト元のユーザーのIDを特定できます。

Firebaseでは、サーバーのFirebase Admin SDKを利用するときに、クライアントで取得したIDトークンをサーバーに渡すことでリクエスト元のユーザーのIDを特定できます。

ユーザーが機能を使うたびにこれをおこなうことで認証をおこなうことができます。

しかし、その実装方法の公式ドキュメントが古かったので、こちらで新しいものを紹介します。

なお、実装方法が変わったこと(モジュラーへの移行)についてはこちらの公式ページをご覧ください。

Node.js SDK Admin SDK v10(モジュラー SDK)にアップグレードする

クライアントでIDトークンを取得

JavaScript

import { getAuth } from "firebase/auth";
 
// Function to get Firebase user's id token
async function getFirebaseIdToken() {
  try {
    const auth = getAuth();
    return new Promise((resolve, reject) => {
      const unsubscribe = auth.onAuthStateChanged((user) => {
        unsubscribe(); // Stop listening for auth state changes
        if (user) {
          user
            .getIdToken(true)
            .then((idToken) => {
              console.log("idToken:", idToken);
              resolve(idToken);
            })
            .catch(reject);
        } else {
          reject(new Error("No user logged in"));
        }
      }, reject); // Handle possible errors
    });
  } catch (error) {
    console.error("Error fetching token:", error);
    throw error; // Rethrow the error if you want to handle it outside
  }
}

公式ドキュメントはこちら(古くなっていてそのままでは動きません(2024年4月22日現在))

サーバーでIDトークンからユーザーのuidを取得

Node.js

const { getAuth } = require('firebase-admin/auth');
const auth = getAuth();
 
// Function to verify idToken and get user id
async function getUserIdFromIdToken(idToken) {
  try {
    const decodedToken = await auth.verifyIdToken(idToken);
    return decodedToken.uid;
  } catch (error) {
    console.error('Error verifying idToken:', error);
    throw error;
  }
}

公式ドキュメントはこちら

これにより、クライアントから送られてきたリクエストがユーザーのものであるかどうかの検証と、ユーザーIDの取得ができるようになりました。

On this page