OAuth ベースの Google ログイン「効率化」リンクのコンセプト ガイド

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

次のいずれかに該当する場合は、合理化されたリンクをおすすめします。 以下が適用されます。

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

合理化されたリンクが適切なソリューションであることを確認するには、 アカウントのリンクの種類を選択するページ。

主な用語

合理化されたリンクの仕組みについて学ぶ前に、以下の内容を理解しておいてください。 次の用語に置き換えます。

  • 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"
}
  • user.verificationStatus: エラーの有無を示すためにシステムによって設定されるプロパティ。 確認済みのユーザーが存在します。

  • user.accountLinkingStatus: エラーの有無を示すためにシステムによって設定されるプロパティ。 ID がリンクされています。

  • アカウント リンクのシステムシーン: 確認を実装する事前定義のシーン フローと、特定のユースケースに合わせてカスタマイズできます。

  • 認可コードフロー: Google Cloud で実装できる OAuth 2.0 フロー 効率的なリンク設定。このフローには、次の 2 つのエンドポイントが必要です。

    • 認可エンドポイント: ログイン UI を提示するエンドポイント まだログインしていないユーザーに 公開する必要があります同意を記録する 一時的な認証コードの形式でアクセスをリクエストしました。
    • トークン交換エンドポイント: このエンドポイントは 2 つのタイプを担います。 3 つのエクスチェンジ: <ph type="x-smartling-placeholder">
        </ph>
      1. 認証コードを有効期間の長い更新トークンと交換する 有効期間の短いアクセストークンを使用できますこの交換はユーザーが アカウントのリンクフローが行われます。
      2. 有効期間の長い更新トークンを有効期間の短いアクセスと交換します あります。この交換は、Google が新しいアクセス トークンを必要とするときに行われます。 期限切れになっているためです。
  • 暗黙的コードフロー: Google Cloud で実装できる OAuth 2.0 フロー 効率的なリンク設定。このフローに必要なのは認可エンドポイントのみです。 このフローの間、Google はユーザーのリクエスト できます。ログインが成功すると、有効期間の長いアクセス トークンを Googleこのアクセス トークンは、サービス アカウントから送信された 追加することもできます。

  • アクセス トークン: サービスに対して特定のサービス アカウントに対するアクセスを 保護します。アクセス トークンは個々のユーザーに関連付けられます。

  • 更新トークン: 更新前に新しいアクセス トークンと交換されるトークン。 アクセス トークンの有効期限が切れたことを意味します。

前提条件

合理化されたリンクタイプを使用するには、次のものが必要です。

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

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

仕組み

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

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

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

効率的なリンクフロー

このセクションでは、効率的なリンクにより発生する可能性のあるさまざまなフローについて説明します。 以下の図は、認可コードフローで発生するフローを示しています。 暗黙的なコードフローではなく、Actions Builder の使用を想定しています。

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

上記のフローでは、アカウント リンクのシステムシーンに移行して、 提示します。シーンがユーザーにアクセス権を求める 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 の通常の順序でデータベースにクエリを送信します。 このユーザーが新しいため、まだ存在していません。アクションは次に、 通常の注文を設定します