0

「暗黙のフロー」でアカウントのリンクを行うために、アクションの承認フローを作成しました。Web シミュレーターを使用してテストしています。Web シミュレーターでアクションを実行しようとすると、アカウントをリンクするように指示され、URL が表示されます。

" https://assistant.google.com/services/auth/handoffs/auth/start?provider=hello_dev&return_url=https://www.google.com/ "

その URL を実行すると、次のようになります。

  • 私の Java サーブレットは、Google から認証リクエストを受け取ります。文書化されているもの、GOOGLE_CLIENT_ID、REDIRECT_URI、STATE、および「response_type=token」が含まれています
  • UserServiceFactory.getUserService().getCurrentUser().getUserId() を使用して、ログインしている Google ID からアクセス トークンを作成します。
  • ACCESS_TOKEN、token_type=bearer、および state= 最初に受け取った状態文字列を含むリダイレクト URI への URL を作成します。
  • そのリンクを含むユーザー用の Web ページを作成して、ユーザーがクリックできるようにします。リンクが実行され、アカウントがリンクされます。

これはうまく機能し、応答は次のような URL を含む空白のページです

ただし、ユーザーがログインしていることを確認し、リンクしたい Google アカウントにログインできるフローが必要でした。

そのため、必要に応じてログアウトするためのリンクも提示します。リンクは userService.createLogoutURL(thisUrl) を使用して作成されます

その場合は、userService.createLoginURL(thisUrl) を使用して作成されたログイン用のリンクを提示します。

別の Google ID でログインすると、元のページに戻り、再度ログアウトするか、[アカウントをリンク] リンクをクリックできます。

「アカウントのリンク」リンクをクリックすると、ログアウトする前に正常に機能していたのとまったく同じリンク (異なる ACCESS_TOKEN 値を除く) と別のアカウントで再度ログインすると、応答は空白になります。 「 https://www.google.com/?result_code=FAILURE&result_message=Account+linking+failed」という URL のページ

2 つの注意事項:

  • ログアウトして同じアカウントで再度ログインすると、「アカウントのリンク」URL は正常に機能します。
  • プロセスの開始時にまったくログインせず、ログインしてから「アカウントのリンク」リンクを使用すると、正常に機能します

そのため、失敗するのは、ログイン、ログアウト、別のアカウントでのログイン、クリックしてアカウントをリンクするときだけです。そんな時は失敗です。

ブラウザーが最初のアカウントにログインし、フロー中に変更されない限り、アカウントは問題ではありません。複数の異なるアカウントが機能します。

正直なところ、これがどのように起こっているのか想像できません。

これを Google Home アプリで行うとさらに悪化します。「不正な形式のリクエスト エラー」ページが返され、基本的に動作が完全に停止します。アクションの停止/開始は役に立ちませんでした。Web サービスの停止/開始は役に立ちませんでした。Android デバイスを再起動しても解決しませんでした。Google Home アプリからのリンク アカウントが完全に壊れていました。再び機能させることができた唯一の方法は、Android デバイスの Chrome ブラウザーでアカウント リンク URL (Web シミュレーターから取得したもの) を使用することでした。これにより、すべてが「リセット」されたように見えました。

4

1 に答える 1