web-dev-qa-db-ja.com

GoogleのアクションでGoogleアカウントだけでユーザーを認証する方法は?

現在、Google Assitantには、簡単な方法 ユーザーに関する識別不可能な情報を要求する と、OAuth2を介してサードパーティサービスでユーザーを認証する詳細なフローが含まれています。ユーザーがGoogle自体で認証を受けるだけでよい場合はどうですか? Google OAuth2情報を使用してアカウントリンクフローに入力しようとしましたが、うまくいかないようです。その最後の事柄が流workに動作することになっている場合、それは十分な答えになります。

コンテキスト:ユーザーは、関連するWebページでGoogleのみで既に認証されています。必要なのは、既に認証されたこのアカウントを、Google Assistantの認証されていないアカウントにリンクすることです。

20
David Mulder

Googleに連絡した後、現在の状況では、独自のOAuth2サーバーをセットアップし、OAuth2サーバーのログイン画面でGoogle OAuth2フローを開始する必要があるようです。

google Oauth2で独自のエンドポイントを持っている必要があります-Google Oauth自体をプロバイダーとして使用することはできません。GoogleOAuthサービスでは、代わりに独自のエンドポイントで「Googleでサインイン」ボタンを使用できます。

出典:GoogleサポートでのGoogleアクションへの連絡

ちょっと言葉を失います...これは巨大のGoogle側の見落としだと思われます。

4
David Mulder

アップデート、2018年10月25日:

2018年9月13日の時点で、プロジェクトでGoogleサインインを使用している場合に、ユーザーのアカウントにアクセスするはるかに簡単な方法があります。 アシスタント用のGoogleサインイン は、Google IDを含むユーザーに関する情報が許可されたIDトークンを提供します。この許可は音声を使用するだけで付与でき、かなり合理化されています。

これをWebベースまたはアプリベースのGoogleサインインと組み合わせて にアクセスする許可を得ることができますOAuthスコープ。

2017年10月25日更新:

10月4日または10月7日頃に、Googleは ポリシー (再び)を更新して、言語制限を復元しますOAuth有効なエンドポイント。

OAuthを使用してアカウントリンクを実装する場合、OAuthエンドポイントを所有する必要があります

(下記のコメントから)このメソッドが機能しないようにGoogleエンドポイントをチェックしているようです。

この時点でできることは、独自のOAuth2サーバーをセットアップすることだけです。

元の投稿:

大まかに言うと、実行する必要がある認証タスクは4つの部分に分かれています。

  1. Calendar APIが有効になり、OAuth2クライアントが正しく構成されるように、プロジェクトを(クラウドコンソールで)構成します。
  2. アクションコンソールでアカウントリンクのアクションを構成します。
  3. API.AIエージェントのGoogleインテグレーションのアクションを設定して、サインインが必要であることを示します。
  4. API.AIがWebhookを呼び出してインテントを実行すると、JSONの一部として認証トークンが含まれます。このトークンを使用して、必要なGoogle APIを呼び出すことができます。

クラウドプロジェクトの構成

必要なGoogle APIにアクセスできるようにクラウドプロジェクトを構成し、OAuth2クライアントID、シークレット、リダイレクトURIを設定する必要があります。

  1. https://console.cloud.google.com/apis/dashboard に移動し、作業中のプロジェクトが選択されていることを確認します。次に、必要なAPIが有効になっていることを確認します。

  2. 左側の「資格情報」メニューを選択します。次のようなものが表示されるはずです。

Credentials screen

  1. [認証情報を作成]を選択してから[OAuthクライアントID]を選択します Create credentials

  2. これが「Webアプリケーション」用であることを選択します(それは...ちょっと...)

  3. 名前を入力してください。以下のスクリーンショットでは、「アクションクライアント」を使用したため、これは実際にはGoogle上のアクション用です。

  4. 「承認済みリダイレクトURI」セクションでは、クラウドコンソールで「your-project-id」部分を...プロジェクトIDで置き換える_https://oauth-redirect.googleusercontent.com/r/your-project-id_という形式のURIを含める必要があります。この時点で、画面は次のようになります。 enter image description here

  5. [作成]ボタンをクリックすると、クライアントIDとシークレットの画面が表示されます。これらのコピーを今すぐ入手できますが、後で入手することもできます。 enter image description here

  6. [OK]をクリックすると、新しいクライアントIDが追加された[資格情報]画面に戻ります。 IDとシークレットを再度取得する必要がある場合(または侵害された場合はシークレットをリセットする場合)は、鉛筆アイコンをクリックできます。

enter image description here

アクションコンソールの設定

OAuthプロジェクトのセットアップが完了したら、これがユーザーの認証と承認に使用するものであることをアクションに伝える必要があります。

  1. https://console.actions.google.com/ に移動し、使用するプロジェクトを選択します。

  2. 概要で、ステップ4「アカウントのリンク」に進むまで、必要な設定をすべて行います。これには、名前とアイコンを設定する必要がある場合があります。これらを修正する必要がある場合は、後で戻ることができます。

enter image description here

  1. 「承認コード」の付与タイプを選択し、「次へ」をクリックします。

enter image description here

  1. [クライアント情報]セクションで、クラウドコンソールで資格情報を作成したときのクライアントIDとクライアントシークレットを入力します。 (忘れた場合は、Cloud Console APIの資格情報セクションに移動し、鉛筆をクリックします。)

  2. 認証URLに、_https://accounts.google.com/o/oauth2/v2/auth_と入力します

  3. トークンURLには、_https://www.googleapis.com/oauth2/v4/token_と入力します

  4. 次へをクリックします

enter image description here

  1. ここで、要求しているスコープに合わせてクライアントを構成します。他のほとんどの場所とは異なり、スコープを入力します-行ごとに1つ必要です。次へをクリックします。

enter image description here

  1. テスト手順を入力する必要があります。アクションを送信する前に、これらの指示には、レビューチームが評価に使用できるテストアカウントとパスワードが含まれている必要があります。ただし、テスト中にそこに何かを置いて、[保存]ボタンをクリックするだけです。

API.AIの設定

API.AIで、ユーザーがアクションを使用するにはサインインする必要があることを示す必要があります。

  1. https://console.api.ai/ に移動して、作業しているプロジェクトを選択します。

  2. [統合]、[Googleでのアクション]の順に選択します。まだオンにしていない場合はオンにします。

  3. [ウェルカムインテントにサインインが必要]チェックボックスをクリックします。

enter image description here

Webhookでの処理

すべてのセットアップの後、Webhookでの処理は非常に簡単です!次の2つの方法のいずれかでOAuth Access Tokenを取得できます。

  • JavaScriptライブラリを使用している場合、app.getUser().authTokenを呼び出す

  • JSONの本文を見ている場合は、_originalRequest.data.user.accessToken_にあります

このアクセストークンを使用して、他の場所で定義されたメソッドを使用してGoogleのAPIエンドポイントに対して呼び出しを行います。

更新トークンは必要ありません-ユーザーがアクセスを取り消さない限り、アシスタントは有効なアクセストークンを渡す必要があります。

41
Prisoner

久しぶりに機能させることができます。最初にwebhookを有効にする必要があり、ダイアログフローフルフィルメントドキュメントでwebhookを有効にする方法を確認できます。GoogleAssistantを使用する場合は、最初に統合でGoogle Assistant統合を有効にする必要があります。次に、Googleでのアクションのアカウントリンクについて、以下に説明する手順に従います。

  1. Googleクラウドコンソールに移動-> APIとサービス->資格情報-> OAuth 2.0クライアントID-> Webクライアント->クライアントID、そこからクライアントシークレットをメモ-> JSONをダウンロード-JSONノートからプロジェクトID、auth_uri、token_uriを下に移動->承認済みリダイレクトURI->アプリのURLをホワイトリストに登録->このURLの固定部分は https://oauth-redirect.googleusercontent.com/r/ URLにプロジェクトIDを追加->変更を保存

  2. Googleでのアクション->アカウントリンクのセットアップ1.付与タイプ=認証コード2.クライアント情報1.クライアントID、クライアントsecrtet、auth_uri、token_uriを入力します2. auth uriを https://www.googleapisとして入力します.com/auth and token_uri as https://www.googleapis.com/token 3.保存して実行4. Googleアシスタントで実行中にエラーが表示されますが、心配しないでください5.アシスタント設定のアカウントリンクセクションに戻り、auth_uriを https://accounts.google.com/o/oauth2/auth と入力し、token_uriを https://と入力しますaccounts.google.com/o/oauth2/token 6.スコープを https://www.googleapis.com/auth/userinfo.profile および https:/ /www.googleapis.com/auth/userinfo.email を着用してください。 7.変更を保存します。

  3. ホスティングサーバーのログでは、アクセストークンの値を確認でき、アクセストークンを介して、メールアドレスに関する詳細を取得できます。

  4. このリンク「 https://www.googleapis.com/oauth2/v1/userinfo?access_token= 」にアクセストークンを追加すると、結果のjsonページで必要な詳細を取得できます。
  5. accessToken = req.get("originalRequest").get("data").get("user").get("accessToken")
    r = requests.get(link) print("Email Id= " + r.json()["email"]) print("Name= " + r.json()["name"])
2
Jatin

開発しているGoogle AssistantアプリにOauthプロトコルを実装する必要があります。もう少し明確にしましょう。

  1. ユーザーはアシスタントを使用しているため、アプリ側にあるデータにリンクする必要があります
  2. ユーザーに関するデータへのアクセスは、アクセストークンによって保護されています
  3. 次に、このリソースにアクセスするために、このトークンを要求する必要があります
  4. Googleがトークンを取得すると、トークンをアプリに送信して、すべてのリクエストを検証してリソースを取得できます。

これが、独自のoauth=サーバー(正直に言うと、アプリケーション内のもう2つのエンドポイント)を実装する必要がある理由です。IDはGoogle側で確認されますが、ユーザーとリソース上記のプロセスは有効であるため、独自のトークンエンドポイントと独自の認証エンドポイントを指定する必要があります。ユーザーがgoogleにログインしてメールを取得することのみを確認する場合は、 、/ authエンドポイントを必要としない合理化されたIDフローを実装する必要があります( 合理化されたIDフローでユーザーを自動的にサインアップする

そのビーイングは、私がフローを実装したが、同じエラーが発生すると言った:expected_inputs[0].possible_intents[0]: Transactions/Identity API must be enabled before using.

1
Antoine Laurent