このガイドでは、ユーザー認証に Google Identity Services ライブラリを使用するか、独自の JavaScript ライブラリを実装するかを選択する際に役立つ情報を提供します。これにより、ウェブ アプリケーションに最適な OAuth 2.0 認証フローを判断できます。
このガイドを読む前に、概要とユーザー認証の仕組みのガイドで説明されている用語とコンセプトを理解しておく必要があります。
GIS ライブラリは、ユーザーのデバイスのサポートされているブラウザで実行されます。Node.js などのサーバーサイド JavaScript フレームワークでの使用は想定されていません。代わりに、Google の Node.js クライアント ライブラリを使用してください。
このガイドでは、承認とデータ共有に関するトピックのみを取り上げます。ユーザー認証はレビューしません。ユーザーの登録とログインについては、Google でログインと Google ログインからの移行ガイドをご覧ください。
GIS ライブラリが適切かどうかを判断する
Google のライブラリを使用するか、独自のライブラリを作成するかは、ニーズに最も適した方法を選択する必要があります。機能の概要:
- Google の Identity Services JavaScript ライブラリは、次の機能を実装しています。
- リダイレクトを最小限に抑えるダイアログベースの同意フローにより、ユーザーは承認プロセス全体を通してサイトに留まることができます。
- クロスサイト リクエスト フォージェリ(CRSF)などのセキュリティ機能。
- 個々のスコープをリクエストし、ユーザーの同意を確認するためのヘルパー メソッド。
- エンジニアが開発中に使用し、後でサイト訪問者が使用するための、人間が理解しやすいエラー処理とドキュメント リンク。
- Identity Services ライブラリを使用せずに実装する場合は、次の処理を行う必要があります。
- リダイレクトなど、Google の OAuth 2.0 エンドポイントを使用したリクエストとレスポンスの管理。
- ユーザー エクスペリエンスの最適化。
- リクエストとレスポンスを検証し、CSRF を防止するためのセキュリティ機能の実装。
- リクエストされたスコープに対してユーザーが同意したことを確認するメソッド。
- OAuth 2.0 エラーコードの管理、人が読めるメッセージの作成、ユーザー向けヘルプへのリンク。
まとめると、Google は OAuth 2.0 クライアントを迅速かつ安全に実装し、ユーザーの承認エクスペリエンスを最適化するために GIS ライブラリを提供しています。
認可フローを選択する
Google Identity Services JavaScript ライブラリを使用するか、独自のライブラリを作成するかに関係なく、暗黙的フローまたは認可コードフローのいずれかの OAuth 2.0 認可フローを選択する必要があります。
どちらのフローでも、Google API の呼び出しに使用できるアクセス トークンが生成されます。
2 つのフローの主な違いは次のとおりです。
- ユーザー アクションの数
- ユーザーがいないときにアプリが Google API を呼び出すかどうか、
- エンドポイントをホストし、個々のユーザー アカウントのユーザーごとの更新トークンを保存するためにバックエンド プラットフォームが必要な場合。
- ユーザー セキュリティのレベルを上げたり下げたりできます。
フローを比較してセキュリティ要件を評価する際に考慮すべき要素は、選択するスコープによってユーザー セキュリティのレベルが異なることです。たとえば、カレンダーの招待状を読み取り専用で表示することは、読み取り / 書き込みスコープを使用してドライブ内のファイルを編集することよりもリスクが低いと考えられます。
OAuth 2.0 フローの比較
| 暗黙的フロー | 認可コードフロー | |
| ユーザーの同意が必要 | 有効期限切れのトークンの置き換えなど、すべてのトークン リクエスト。 | 最初のトークン リクエストの場合のみ。 |
| ユーザーが存在している必要がある | ○ | いいえ、オフラインでの使用に対応しています。 |
| ユーザー セキュリティ | 最小 | ほとんどの場合、クライアント認証があり、ブラウザ内でのトークン処理のリスクを回避できます。 |
| アクセス トークンが発行されました | ○ | ○ |
| 更新トークンが発行された | × | ○ |
| サポートされているブラウザが必要 | ○ | ○ |
| Google API の呼び出しに使用されるアクセス トークン | ユーザーのブラウザで実行されているウェブアプリからのみ取得できます。 | バックエンド プラットフォームで実行されているサーバーから、またはユーザーのブラウザで実行されているウェブアプリから。 |
| バックエンド プラットフォームが必要 | × | はい。エンドポイントのホスティングとストレージに使用できます。 |
| 安全なストレージが必要 | × | はい。更新トークンの保存に使用されます。 |
| 認証コード エンドポイントのホスティングが必要 | × | はい。Google から認証コードを受け取るためです。 |
| アクセス トークンの有効期限の動作 | 新しい有効なアクセス トークンをリクエストして取得するには、ボタンを押す、リンクをクリックするなどのユーザー ジェスチャーが必要です。 | ユーザーの初回リクエストの後、プラットフォームは保存された更新トークンを交換して、Google API の呼び出しに必要な新しい有効なアクセス トークンを取得します。 |