【Identity Platform 活用】① フロントエンドとバックエンドの役割分担
1. はじめに
こんにちは、クラウドエース第三開発部の秋庭です。
今回は Identity Platform の活用方法についてご紹介できればと思います。
現代の Web アプリケーションにおいて、ユーザーの認証と管理は重要な要素です。IDaaS である Identity Platform を活用することで、これらの機能を効率的にアプリケーションに組み込むことが可能です。
今回の記事ではフロントエンドとバックエンドの SDK、双方の出来ることの違いを軸に、これらの使い分けについて紹介したいと思います。
以下の点については今回の記事で取り扱いませんので、ご了承下さい。
- Identity Platform 自体の紹介
- Identity Platform と Firebase Authentication の詳細な比較
- 詳細な実装方法
- 公式ドキュメント、各言語 SDK の API リファレンスをご参照ください
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 も提供されています。
アプリケーションの要件に応じて、セッションの管理方法を切り替えることが可能です。
弊社唐津の記事もご参考までに確認ください
参考
・ ID トークンを検証する | Firebase Authentication
・ ID トークンの取り消しを検出する | Firebase Authentication
ユーザー属性の付与
Admin SDK では、ユーザーに対してカスタムクレームの付与が可能です。
カスタムクレームによって、ユーザーに対して Admin
などの属性を付与することができ、アプリケーションでの認可制御を実現することができます。
設定されたカスタムクレームは ID トークンの検証を通して取得でき、これは Web SDK、Admin SDK 双方で可能です。
参考
・ カスタム クレームとセキュリティ ルールによるアクセスの制御 | Firebase Authentication
カスタムトークンの作成
Admin SDK でカスタムトークンを作成し、このトークンを利用して Web SDK でログインすることができます。
用途としては、Identity Platform が対応していない認証システム(例えば、社員番号とパスワードを使用した認証システムなど)が既に存在する場合、認証システムを維持しながら、Identity Platform を利用したログインが可能になります。
参考
・ カスタム トークンを作成する | Firebase Authentication
その他
Web SDK を利用して、パスワード再設定やメールアドレス認証などメール送信を伴う操作を行うと、メールの本文はテンプレートに従って送信されます。
Admin SDK ではこの本文に添付されるリンクのみを生成することができ、高度なメールのカスタマイズや、メール以外のメッセージングサービスを通じて送信することが可能になります。
参考
・ メールのアクション リンクを生成する | Firebase Authentication
5. 実装例
ユーザーサインイン
- フロントエンド(Web SDK)
- ユーザーがフォームにメールとパスワードを入力
- Web SDK を使用して認証リクエストを送信
- 認証成功後、ID トークンを取得しリクエストを送信
- バックエンド(Admin SDK)
- フロントエンドから送信された ID トークンを検証
- 必要に応じてユーザーの権限を確認し、適切なデータアクセスを提供
ユーザー管理
- バックエンド(Admin SDK)
- 管理者が新しいユーザーを作成
- Admin SDK を使用してユーザーアカウントを作成し、カスタムクレームを設定
- パスワードリセットリンクを生成し、任意のメッセージングサービスで送信
- ユーザーはリンクから任意のパスワードを設定し、安全にアカウントを移譲
弊社水野の記事もご参考までに確認ください。
6. まとめ
Web SDK と Admin SDK、それぞれの出来ることについて今回の記事でご紹介しました。
今回の比較を改めて以下の表にまとめました。
機能 | Web SDK | Admin SDK |
---|---|---|
ユーザー認証 | 可能 | 不可 |
ユーザー管理(作成や削除) | 自分のアカウントのみ | 全ユーザー |
カスタムクレームの設定 | 不可 | 可能 |
トークン検証(カスタムクレームの取得) | 可能 | 可能 |
カスタムトークンの作成 | 不可 | 可能 |
メールのカスタマイズ | 限定的 | 高度なカスタマイズが可能 |
Identity Platform のベースとなる Firebase Authentication 及び Firebase は、mBaaS のサービスとして展開されています。そのため、多くの操作はフロントエンド(Web SDK) + Web コンソールのみで完結するように設計されています。
今回の記事を通して、Web SDK と Admin SDK の役割を理解することで、IDaaS として活用の幅が広がると思います。
この記事が、IDaaS 導入の際の検討の一助になれば幸いです。
ここまで読んで頂き、ありがとうございました。
関連記事
Discussion