現在、Google Assitantには、簡単な方法 ユーザーに関する識別不可能な情報を要求する と、OAuth2を介してサードパーティサービスでユーザーを認証する詳細なフローが含まれています。ユーザーがGoogle自体で認証を受けるだけでよい場合はどうですか? Google OAuth2情報を使用してアカウントリンクフローに入力しようとしましたが、うまくいかないようです。その最後の事柄が流workに動作することになっている場合、それは十分な答えになります。
コンテキスト:ユーザーは、関連するWebページでGoogleのみで既に認証されています。必要なのは、既に認証されたこのアカウントを、Google Assistantの認証されていないアカウントにリンクすることです。
Googleに連絡した後、現在の状況では、独自のOAuth2サーバーをセットアップし、OAuth2サーバーのログイン画面でGoogle OAuth2フローを開始する必要があるようです。
google Oauth2で独自のエンドポイントを持っている必要があります-Google Oauth自体をプロバイダーとして使用することはできません。GoogleOAuthサービスでは、代わりに独自のエンドポイントで「Googleでサインイン」ボタンを使用できます。
出典:GoogleサポートでのGoogleアクションへの連絡
ちょっと言葉を失います...これは巨大のGoogle側の見落としだと思われます。
アップデート、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つの部分に分かれています。
クラウドプロジェクトの構成
必要なGoogle APIにアクセスできるようにクラウドプロジェクトを構成し、OAuth2クライアントID、シークレット、リダイレクトURIを設定する必要があります。
https://console.cloud.google.com/apis/dashboard に移動し、作業中のプロジェクトが選択されていることを確認します。次に、必要なAPIが有効になっていることを確認します。
左側の「資格情報」メニューを選択します。次のようなものが表示されるはずです。
これが「Webアプリケーション」用であることを選択します(それは...ちょっと...)
名前を入力してください。以下のスクリーンショットでは、「アクションクライアント」を使用したため、これは実際にはGoogle上のアクション用です。
「承認済みリダイレクトURI」セクションでは、クラウドコンソールで「your-project-id」部分を...プロジェクトIDで置き換える_https://oauth-redirect.googleusercontent.com/r/your-project-id
_という形式のURIを含める必要があります。この時点で、画面は次のようになります。
[作成]ボタンをクリックすると、クライアントIDとシークレットの画面が表示されます。これらのコピーを今すぐ入手できますが、後で入手することもできます。
[OK]をクリックすると、新しいクライアントIDが追加された[資格情報]画面に戻ります。 IDとシークレットを再度取得する必要がある場合(または侵害された場合はシークレットをリセットする場合)は、鉛筆アイコンをクリックできます。
アクションコンソールの設定
OAuthプロジェクトのセットアップが完了したら、これがユーザーの認証と承認に使用するものであることをアクションに伝える必要があります。
https://console.actions.google.com/ に移動し、使用するプロジェクトを選択します。
概要で、ステップ4「アカウントのリンク」に進むまで、必要な設定をすべて行います。これには、名前とアイコンを設定する必要がある場合があります。これらを修正する必要がある場合は、後で戻ることができます。
[クライアント情報]セクションで、クラウドコンソールで資格情報を作成したときのクライアントIDとクライアントシークレットを入力します。 (忘れた場合は、Cloud Console APIの資格情報セクションに移動し、鉛筆をクリックします。)
認証URLに、_https://accounts.google.com/o/oauth2/v2/auth
_と入力します
トークンURLには、_https://www.googleapis.com/oauth2/v4/token
_と入力します
次へをクリックします
API.AIの設定
API.AIで、ユーザーがアクションを使用するにはサインインする必要があることを示す必要があります。
https://console.api.ai/ に移動して、作業しているプロジェクトを選択します。
[統合]、[Googleでのアクション]の順に選択します。まだオンにしていない場合はオンにします。
[ウェルカムインテントにサインインが必要]チェックボックスをクリックします。
Webhookでの処理
すべてのセットアップの後、Webhookでの処理は非常に簡単です!次の2つの方法のいずれかでOAuth Access Tokenを取得できます。
JavaScriptライブラリを使用している場合、app.getUser().authToken
を呼び出す
JSONの本文を見ている場合は、_originalRequest.data.user.accessToken
_にあります
このアクセストークンを使用して、他の場所で定義されたメソッドを使用してGoogleのAPIエンドポイントに対して呼び出しを行います。
更新トークンは必要ありません-ユーザーがアクセスを取り消さない限り、アシスタントは有効なアクセストークンを渡す必要があります。
久しぶりに機能させることができます。最初にwebhookを有効にする必要があり、ダイアログフローフルフィルメントドキュメントでwebhookを有効にする方法を確認できます。GoogleAssistantを使用する場合は、最初に統合でGoogle Assistant統合を有効にする必要があります。次に、Googleでのアクションのアカウントリンクについて、以下に説明する手順に従います。
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を追加->変更を保存
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.変更を保存します。
ホスティングサーバーのログでは、アクセストークンの値を確認でき、アクセストークンを介して、メールアドレスに関する詳細を取得できます。
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"])
開発しているGoogle AssistantアプリにOauthプロトコルを実装する必要があります。もう少し明確にしましょう。
これが、独自のoauth=サーバー(正直に言うと、アプリケーション内のもう2つのエンドポイント)を実装する必要がある理由です。IDはGoogle側で確認されますが、ユーザーとリソース上記のプロセスは有効であるため、独自のトークンエンドポイントと独自の認証エンドポイントを指定する必要があります。ユーザーがgoogleにログインしてメールを取得することのみを確認する場合は、 、/ authエンドポイントを必要としない合理化されたIDフローを実装する必要があります( 合理化されたIDフローでユーザーを自動的にサインアップする )
そのビーイングは、私がフローを実装したが、同じエラーが発生すると言った:expected_inputs[0].possible_intents[0]: Transactions/Identity API must be enabled before using.