Firebase SDKとは、Googleが提供するバックエンドサービス「Firebase」の機能(認証・データベース・ストレージ・通知など)を、アプリやWebサイト、サーバー側のプログラムから簡単に利用できるようにしたソフトウェア開発キット(Software Development Kit)のこと。
クライアントSDKとAdmin SDKの2種類あります。
目次
Firebase クライアントSDK(例:Firebase JavaScript SDK)
用途:ユーザーのブラウザやスマホアプリの「クライアント側」で使うSDK
主な役割
- ログイン・サインアップなどのユーザー認証
- Firestore/Realtime Databaseへの読み書き(セキュリティルールに従う)
- Cloud Storageへのアップ/ダウンロード
特徴
- 利用者は「一般ユーザー」(=認可範囲はセキュリティルール次第)
- 権限が限定されている
代表例:import { getAuth } from "firebase/auth";
など(npmパッケージ名:firebase)
別名:「Firebase JavaScript SDK」と呼ばれることも多い(Webの場合)
Firebase Admin SDK
用途:Next.js等の「サーバーサイド」や、管理ツール、バッチ処理用など「信頼できる特権環境」で使うSDK
主な役割
- ユーザーアカウントの作成・削除・管理
- セキュリティルールを無視したフルアクセスなDB操作
- Firebase Authのトークン検証やカスタムトークンの発行
- 管理者用途のメッセージ送信や各種バックエンドオペレーション
特徴
- サーバーの「サービスアカウント認証情報」を利用し、制限なく全ての操作が可能
- 誤使用は危険なので、必ず管理者だけが使う
代表例:import { getAuth } from "firebase-admin/auth";
(npmパッケージ名:firebase-admin)
両者の違いまとめ
SDK名 | 実行場所 | 権限 | 主な用途 |
---|---|---|---|
クライアントSDK | クライアント側 | 制限あり(ルール従う) | 一般ユーザーの通常操作 |
Admin SDK | サーバー側 | 制限なし(管理権限) | 全データ操作・ユーザー管理等 |
自分用メモ:NextAuth×Firebase認証連携=Admin SDK不要ではない
Firebase Auth × NextAuthでログイン認証・セッション管理を実装している場合でも、Firebase Admin SDKは「サーバー側でトークン検証やユーザー管理をするため」に使うのが一般的。
使う場面:
「Firebase Authenticationで発行されたIDトークンが本物かどうか検証する」処理はサーバー側で必要だが、このときAdmin SDKを使うのが推奨されている。
次のようにNextAuthのCredentialsProvider
のauthorize
関数内で、IDトークンの検証にAdmin SDKのverifyIdToken()
を使う実装が一般的。
async authorize(credentials) {
try {
// Firebase JWT(IDトークン)を検証
const firebaseJWT = await adminAuth().verifyIdToken(credentials.idToken);
return {
id: firebaseJWT.uid,
email: firebaseJWT.email,
};
} catch (error) {
console.error('IDトークンの検証に失敗しました:', error);
return null; // Firebase JWT検証失敗
}
}
したがって、「NextAuth×Firebase認証連携=Admin SDK不要」というわけではなく、
- クライアントはFirebase JavaScript SDK
- サーバーはFirebase Admin SDK(トークン検証・管理処理等)
の両方を用いるのが標準的な構成。