Zenn
🔒

【Identity Platform 活用】① フロントエンドとバックエンドの役割分担

2025/01/09に公開

1. はじめに

こんにちは、クラウドエース第三開発部の秋庭です。
今回は Identity Platform の活用方法についてご紹介できればと思います。

現代の Web アプリケーションにおいて、ユーザーの認証と管理は重要な要素です。IDaaS である Identity Platform を活用することで、これらの機能を効率的にアプリケーションに組み込むことが可能です。
今回の記事ではフロントエンドとバックエンドの SDK、双方の出来ることの違いを軸に、これらの使い分けについて紹介したいと思います。

以下の点については今回の記事で取り扱いませんので、ご了承下さい。

2. 用語

以下に今回の記事で扱う、用語について記載します。

  • Web SDK
    • クライアントサイドで使用される SDK です。今回は Web SDK のみ取り上げますが、クライアントサイドの SDK としては他にも、iOS、Android、Flutter、Unity、C++ 向けのものがあります。
  • Admin SDK
    • サーバーサイドで使用される SDK です。Node.js、Java、Python、Go、C# のライブラリが提供されています。
  • ID トークン
    • ログイン時に Identity Platform (Firebase) より払い出される JWT の事を指します。

参考
サポートされているプラットフォーム、フレームワーク、ライブラリ、ツール  |  Firebase ドキュメント
サーバーに Firebase Admin SDK を追加する

3. Web SDK でできること

ユーザー認証

Web SDK は、認証機能を簡単に実装できます。Identity Platform では、以下のような認証が利用可能です。

  • パスワード認証
  • Google、Facebook などのフェデレーション ID プロバイダと連携した認証
  • メールリンク認証
  • 匿名認証
  • OIDC、SAML 認証
  • SMS、TOTP 多要素認証

など

Web SDK では、上記の方法でユーザー認証を行い、取得した ID トークンの管理を行うことができます。
セキュリティ要件や、UX に応じて ID トークンの保存場所を変更することが可能です。

参考
Firebase Authentication
認証状態の永続性  |  Firebase
getIdToken  |  Firebase JavaScript API reference

自身のアカウントに対する操作

エンドユーザーは Web SDK を通じて自身のアカウントに対する操作(作成・更新・削除)を行うことが可能です。
自身のアカウントのパスワードリセットや、メールアドレスの更新といった操作はクライアントサイドで完結します。

参考
Firebase でユーザーを管理する
ユーザーを再認証する

その他

Identity Platform 及び Firebase Authentication ではパスワードポリシーが設定できます。
入力されたパスワードがポリシーに適合しているかのバリデーションは、Web SDK によりクライアントサイドから検証可能です。

参考
パスワード ポリシーを設定する
validatePassword  |  Firebase JavaScript API reference

4. Admin SDK でできること

ユーザー管理

Admin SDK では、ユーザーアカウントの作成、削除など Web SDK で可能であった操作に加え、ユーザーの無効化、ID プロバイダの連携、ユーザー属性の付与などの操作を、すべてのユーザーに対して行うことができます。

参考
ユーザー管理  |  Firebase Authentication

リクエストの検証

リクエストに Web SDK で取得した ID トークンを付与し、Admin SDK で検証することでリクエストが認証されたユーザーによるものかを確認することができます。

ID トークン(JWT) の検証ということでステートレスなセッション管理が想像されますが、Identity Platform (Firebase Authentication) ではステートフルに検証する API も提供されています。
アプリケーションの要件に応じて、セッションの管理方法を切り替えることが可能です。

弊社唐津の記事もご参考までに確認ください
https://zenn.dev/cloud_ace/articles/identity-platform-multitenancy-session-management

参考
ID トークンを検証する  |  Firebase Authentication
ID トークンの取り消しを検出する  |  Firebase Authentication

ユーザー属性の付与

Admin SDK では、ユーザーに対してカスタムクレームの付与が可能です。
カスタムクレームによって、ユーザーに対して Admin などの属性を付与することができ、アプリケーションでの認可制御を実現することができます。
設定されたカスタムクレームは ID トークンの検証を通して取得でき、これは Web SDK、Admin SDK 双方で可能です。

参考
カスタム クレームとセキュリティ ルールによるアクセスの制御  |  Firebase Authentication

カスタムトークンの作成

Admin SDK でカスタムトークン(サービスアカウントの秘密鍵で署名した JWT)を作成し、このトークンを利用して Web SDK でログインすることができます。
用途としては、Identity Platform が対応していない認証システム(例えば、社員番号とパスワードを使用した認証システムなど)が既に存在する場合、認証システムを維持しながら、Identity Platform を利用したログインが可能になります。

参考
カスタム トークンを作成する  |  Firebase Authentication

その他

Web SDK を利用して、パスワード再設定やメールアドレス認証などメール送信を伴う操作を行うと、メールの本文はテンプレートに従って送信されます。
Admin SDK ではこの本文に添付されるリンクのみを生成することができ、高度なメールのカスタマイズや、メール以外のメッセージングサービスを通じて送信することが可能になります。

参考
メールのアクション リンクを生成する  |  Firebase Authentication

5. 実装例

ユーザーサインイン

  • フロントエンド(Web SDK)
  1. ユーザーがフォームにメールとパスワードを入力
  2. Web SDK を使用して認証リクエストを送信
  3. 認証成功後、ID トークンを取得しリクエストを送信
  • バックエンド(Admin SDK)
  1. フロントエンドから送信された ID トークンを検証
  2. 必要に応じてユーザーの権限を確認し、適切なデータアクセスを提供

ユーザー管理

  • バックエンド(Admin SDK)
  1. 管理者が新しいユーザーを作成
  2. Admin SDK を使用してユーザーアカウントを作成し、カスタムクレームを設定
  3. パスワードリセットリンクを生成し、任意のメッセージングサービスで送信
  4. ユーザーはリンクから任意のパスワードを設定し、安全にアカウントを移譲

弊社水野の記事もご参考までに確認ください。
https://zenn.dev/cloud_ace/articles/firebase-auth-guide

6. SDK の比較

Web SDK と Admin SDK、それぞれの出来ることについて今回の記事でご紹介しました。
今回の比較を改めて以下の表にまとめました。

機能 Web SDK Admin SDK
ユーザー認証 ✅️ ❌️
ユーザー管理(自分のアカウント) ✅️ (作成・取得・更新・削除) ✅️
ユーザー管理(全ユーザー) ❌️ ✅️
ID トークン検証(カスタムクレームの取得) ❌️ ※1 ✅️
カスタムクレームの設定 ❌️ ✅️
カスタムトークンでのログイン ✅️ (カスタムトークンを使用してのログイン) ✅️ (カスタムトークンの作成)
メールのカスタマイズ 限定的 高度なカスタマイズが可能

7. まとめ

Identity Platform のベースとなる Firebase Authentication 及び Firebase は、mBaaS のサービスとして展開されています。そのため、多くの操作はフロントエンド(Web SDK) + Web コンソールのみで完結するように設計されています。
今回の記事を通して、Web SDK と Admin SDK の役割を理解することで、IDaaS として活用の幅が広がると思います。
この記事が、IDaaS 導入の際の検討の一助になれば幸いです。
ここまで読んで頂き、ありがとうございました。


Identity Platform 関連記事

https://zenn.dev/cloud_ace/articles/9b47b0dab6d3ab
https://zenn.dev/cloud_ace/articles/c65abf3ca87336
https://zenn.dev/cloud_ace/articles/253178c575ded7
https://zenn.dev/cloud_ace/articles/16d08bfe8daef4

Discussion

ログインするとコメントできます