OAuth と Google ログインのコンセプト ガイド(Dialogflow)

OAuth と Google ログインのリンクタイプは、Google ログインを OAuth ベースのアカウントのリンク。アクションでこのリンクタイプを使用すると、 フローは Google ログインから始まります。このログインにより、ユーザーの Google プロフィール情報がシステムに存在することを確認します。含まれていない場合は、標準の OAuth フローに沿って 開始されます。これら 2 種類のリンクの組み合わせを提供することで、ユーザーは ユーザーの ID を Google アカウントまたは Google 以外のアカウントで確認できます。条件 Google プロフィールを使用して新しいアカウントを作成することもできます。 情報です。

OAuth と Google ログインは、次のいずれかの場合に推奨されるアカウント リンク ソリューション 以下が適用されます。

  • 複数のプラットフォームにまたがるアクションがある場合(たとえば、 アクションは Android アプリで動作します)。
  • 既存の認証システムがあり、ユーザーが以下の操作を行えるようにする Google 以外のアカウントとの ID をリンクする。たとえば ポイント プログラムを購入しなくても、ユーザーがポイントを失うことの ポイントが表示されます。

OAuth と Google ログインが最適なソリューションであることを確認するには、 アカウントのリンクの種類を選択するページ。

主な用語

OAuth と Google ログインの仕組みを読む前に、 次の用語に置き換えます。

  • Google ID トークン: 以下を含むユーザー ID の署名付きアサーション ユーザーの基本的な Google プロフィール情報(名前、メールアドレス、 プロフィール写真など)。Google ID トークンとは、 JSON Web Token (JWT)。デコードされたトークンの例を以下に示します。
{
  "sub": 1234567890,        // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The token's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Client ID assigned to your Actions project
  "iat": 233366400,         // Unix timestamp of the token's creation time
  "exp": 233370000,         // Unix timestamp of the token's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "locale": "en_US"
}
  • アカウント ログイン ヘルパー インテント: リクエストするために呼び出すヘルパー インテント。 アシスタントからアカウントのリンクフローを作成できます。詳細については、次をご覧ください: アカウントへのログイン
    • コンテキスト文字列: アカウントに追加するカスタマイズされた文字列 リンクする理由をユーザーに伝えるログイン ヘルパー インテント できます。
  • 認可コードフロー: Google Cloud で実装できる OAuth 2.0 フロー OAuth + Google ログイン。このフローには、次の 2 つのエンドポイントが必要です。 <ph type="x-smartling-placeholder">
      </ph>
    • 認可エンドポイント: ログイン UI を提示するエンドポイント まだログインしていないユーザーに 公開する必要があります同意を記録する 一時的な認証コードの形式でアクセスをリクエストしました。
    • トークン交換エンドポイント: このエンドポイントは 2 つのタイプを担います。 3 つのエクスチェンジ: <ph type="x-smartling-placeholder">
        </ph>
      1. 認証コードを有効期間の長い更新トークンと交換する 有効期間の短いアクセストークンを使用できますこの交換はユーザーが アカウントのリンクフローが行われます。
      2. 有効期間の長い更新トークンを有効期間の短いアクセスと交換します あります。この交換は、Google が新しいアクセス トークンを必要とするときに行われます。 期限切れになっているためです。
  • 暗黙的コードフロー: Google Cloud で実装できる OAuth 2.0 フロー OAuth + Google ログイン。このフローに必要なのは認可エンドポイントのみです。 このフローの間、Google はユーザーのリクエスト できます。ログインが成功すると、有効期間の長いアクセス トークンを Googleこのアクセス トークンは、サービス アカウントから送信されたすべてのリクエストに 追加することもできます。
  • アクセス トークン: サービスに対して特定のサービス アカウントに対するアクセスを 保護します。アクセス トークンは個々のユーザーに関連付けられます。
  • 更新トークン: 更新前に新しいアクセス トークンと交換されるトークン。 アクセス トークンの有効期限が切れたことを意味します。

前提条件

OAuth と Google ログインのリンクタイプを使用するには、次のものが必要です。

  • OAuth 2 サーバー
  • トークン交換エンドポイント

    Google のトークン交換エンドポイントのサポートを追加するには、トークン交換エンドポイントを拡張する必要があります。 自動リンクと ID トークンからのアカウント作成のためのプロトコル (つまり、リクエストに intent=get パラメータと intent=create パラメータを追加して このエンドポイントを参照)。

仕組み

このセクションでは、OAuth と Google ログインの一般的なフローについて説明します。 次のセクションの OAuth と GSI のフローでは、以下について説明します。 a)有効か無効かに基づいて発生する可能性のあるさまざまなフロー アカウントの作成、および b)暗黙的または 認証コードフローについて説明します。

基本的なフローは次のとおりです。

  1. アクションが、Google プロフィールへのアクセスに対する同意をユーザーに求めています。
  2. ユーザーが同意すると、アクションは Google ID トークンを受け取ります。 には、ユーザーの Google プロフィール情報が含まれます。
  3. プロフィールのコンテンツを読み取るには、トークンを検証してデコードする必要があります。
  4. アクションはこのトークンを使用して、ユーザーの Google プロフィールが 検出できます。
    1. 表示される場合、ユーザーは 関連付けられ、アシスタントはユーザーの ID を Google アカウント。ユーザーは会話を継続でき、 アカウントをリンクしたアシスタント。
    2. オンになっていない場合は、ステップ 5 をご覧ください。
  5. ユーザーは、a)Google プロフィールを使用して新しいアカウントを作成できます。 b)別のアカウントでシステムにログインしている。「 表示される選択肢は、管理者が有効にするか、 音声によるアカウントの作成を無効にできます。ユーザーが そうしないと、標準の OAuth フローが開始されます。
  6. ユーザーが新しいアカウントを作成するか、別のプロバイダでログインした後、 サービスが Google にアクセス トークンを返します。( 更新トークンも返されます)。
  7. これでユーザーは、 アカウントがリンクされました。

OAuth フローと GSI フロー

このセクションでは、OAuth と GSI で発生する可能性のあるさまざまなフローについて説明します。 以下の図は、認可コードフローで発生するフローを示しています。 を使用しており、Dialogflow を 構築する方法を説明します

各フローには、ユーザーがアクションを呼び出した後の一般的なステップが含まれます。

上記のフローでは、actions.intent.SIGN_IN ヘルパー インテントを 使用します。このインテントはユーザーにアクセス権限を要求します。 Google プロフィール情報ユーザーが同意すると、アシスタントは user@gmail.com のプロフィール情報を含むリクエスト。

この時点以降のフローは、アカウントを設定するかどうかによって異なります。 音声によるリンク設定、ユーザーの情報が ありませんそれぞれのフローについて、以降のセクションで説明します。

音声アカウントの作成を有効にした場合のフロー

このセクションでは、リンクを有効にした場合に発生する可能性があるアカウントのリンクのフローについて詳しく説明します。 音声によるアカウントの作成

フロー 1: ユーザーの情報がデベロッパーのシステムに存在する

この場合、user@gmail.com で表されるユーザーがバックエンドに存在し、 トークン交換エンドポイントはユーザーにトークンを返します。ユーザーの Google アカウントにリンクされました。ユーザーの 元のリクエスト(「いつも注文して」)がカスタム インテント order_drink. と一致した場合 その後、Webhook が一致したインテントのフルフィルメントを処理し、 user@gmail.com のいつもの注文のデータベース。ユーザーはその後、 会話できるようになります。

フロー 2: ユーザーの情報がなく、ユーザーがアカウントを作成する

音声によるアカウントの作成を有効にしましたが、user@gmail.com では有効になっていないため 存在する場合、アシスタントはユーザーに実行するかどうかを尋ねます 次のいずれかになります。

a)Google プロフィール情報を使用して、システムで新しいアカウントを作成する。 これは音声を介して行われます

b)別のアカウントでシステムにログインする

この場合、ユーザーは音声で新しいアカウントを作成することを選択します。Google 経由の通話 アカウントを作成するためのリクエストで、サービスのトークン交換エンドポイントを指定します。 このリクエストには、必要なコンポーネントを含む Google ID トークンが含まれています。 新しいアカウントを作成します。その後、このトークンの情報を使用して、 (ユーザーの名前とメールアドレス)を入力してユーザーのアカウントを作成します。

アカウントが作成されると、サービスによってアクセス トークンが返され、アカウントが更新されます。 新しいアカウントのトークンです。アクション内のユーザー ID は、次のようになります。 Google アカウントにリンクされています。お客様の元のリクエスト(「いつも注文して」) カスタム インテントに一致します。order_drink.次に、Webhook が インテントのフルフィルメントが実行され、データベースに対して user@gmail.com の通常の順序。ユーザーが新しいため、まだ存在しません。 その後、アクションはユーザーに注文したい商品を尋ねます。

フロー 3: お客様の情報がなく、ユーザーが別のアカウントでログインする

音声によるアカウントの作成を有効にした場合、アシスタントがユーザーに 次のいずれかの操作を行います。

a)Google プロフィール情報を使用して、システムで新しいアカウントを作成する。 これは音声を介して行われます

b)別のアカウントでシステムにログインする

この場合、ユーザーは別のアカウントでログインすることを選択し、 標準の OAuth フローが開始されます。音声専用デバイスでフローを開始した場合、 Google が処刑をスマートフォンに転送する。すると、Google は 認可エンドポイントにリモートでアクセスし、 ユーザーは、サービスにログインするかどうかを、 Google ログインを使用していない既存のアカウント、または b)新しいアカウントを作成する 別のプロバイダを使用しますOAuth フローについて詳しくは、このモジュールの OAuth のコンセプト ガイド

ユーザーの認証情報を確認した後、サービスはアクセス トークンを返します。 更新トークンを Google に送信しますアクションのユーザー ID がリンクされました Google 以外のアカウントにはリンクできません。ユーザーの元のリクエスト(「いつも注文して」)が一致している カスタム インテント order_drink. その後、Webhook がユーザーの 一致したインテントを受信し、user@gmail.com の通常の順序でデータベースにクエリを送信します。 このユーザーが新しいため、まだ存在していません。アクションは次に、 ユーザーに注文内容を伝えるか、通常の注文の設定を依頼します。

音声アカウントの作成が無効になっているフロー

このセクションでは、アカウントを無効にした場合に発生する可能性のあるアカウントのリンクのフローについて詳しく説明します。 音声によるアカウントの作成

フロー 4: お客様の情報が存在しない

音声によるアカウントの作成を有効にしておらず、ユーザーが 標準の OAuth フローが開始されます。アシスタントが開いて (フローが音声のみのデバイスで開始された場合)に 画面付きのデバイスに実行が転送されます。ユーザーは a)別のプロバイダとしてログインすることを選択する(そのプロバイダが 別のアカウントでサービスを利用するか、b)新しい Google アカウントを使って 別のプロバイダを使用しますOAuth フローについて詳しくは、このモジュールの OAuth のコンセプト ガイド

ユーザーの認証情報を確認した後、サービスはアクセス トークンを返します。 更新トークンを Google に送信しますアクションのユーザー ID がリンクされました Google 以外のアカウントにはリンクできません。ユーザーの元のリクエスト(「いつも注文して」)が一致している カスタム インテント order_drink. その後、Webhook がユーザーの 一致したインテントを受信し、user@gmail.com の通常の順序でデータベースにクエリを送信します。 このユーザーが新しいため、まだ存在していません。アクションは次に、 通常の注文を設定します