22

GoogleJavaクライアントライブラリとサーバーフロー認証を使用する既存のGoogleドライブ対応アプリケーションがあります。

アプリケーションにログインせずにURLに移動し、そのブラウザで複数のGoogleアカウントにログインしている場合(1つの個人のGoogleアカウントのみが可能で、追加のアカウントはGoogleビジネスアカウントである必要があります)、OAuthコールバックが提供します使用するGoogleアカウントを選択するためのオプション。

ただし、JavaScriptクライアントライブラリの使用への切り替えをテストしているときに、gapi.auth.authorizeを使用して複数アカウント選択画面をアクティブ化することはできません。JSライブラリを使用して複数のアカウントを処理することは可能ですか?

immediate更新:パラメータを試してみましたfalse。ポップアップでアカウントを変更しない限り、ログインできます。アカウントを変更すると、次のようになります。

https://accounts.google.com/o/oauth2/auth?client_id=433863057149.apps.googleusercontent.com&scope=https://www.googleapis.com/auth/drive.file+https://www.googleapis。 com / auth / drive.install + https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/userinfo.profile&immediate=false&redirect_uri=postmessage&origin=https://drivedrawio。 appspot.com&proxy = oauth2relay593063763&response_type = token&state = 701344514&authuser = 1

新しいタブで何も起こりません。デモンストレーション用のビデオを作成しました。

アップデート2:複数のアカウントを二重に選択する必要があるというJSクライアントライブラリに対するこのバグは受け入れられました。

4

4 に答える 4

44

次のパラメータが原因で、マルチユーザー選択画面が表示されません。authuser=0 これにより、サインインしている最初のアカウントが自動的に選択されます(authuser=12番目のアカウントなどが選択されます)。

値がない場合、クライアントライブラリは自動的に0に設定するため(これがマルチアカウントを処理しないと主張する理由です)、クライアントライブラリを使用してそのパラメータを削除することは現在できません。そのため、1つの方法はそれを-1にオーバーライドすることです。たとえば、これはマルチアカウントチューザーを表示します。次に、他のAPIへのアクセスを要求し、ユーザーの電子メールまたはそのIDのいずれかを取得すると同時に、ユーザーのプロファイルまたは電子メールへのアクセスを要求することもできます。その後の認証でuser_id、ユーザー選択画面をバイパスするパラメーターを指定できます。

したがって、実際には、最初に次のように承認します。

gapi.auth.authorize({client_id: <Your Client ID>,
                     scope: 'https://www.googleapis.com/auth/drive openid', // That requires access to Google Drive and to the UserInfo API
                     authuser: -1});

上記の唯一の問題は、マルチアカウント選択画面ですべての認証がブロックされるため、クライアントライブラリの自動更新が機能しないことです。

秘訣は、UserInfo APIを使用してユーザーのIDを取得し、そのIDをセッションCookieに保存して、次のような後続の認証で使用することです。

gapi.auth.authorize({client_id: <Your Client ID>,
                     scope: 'https://www.googleapis.com/auth/drive openid',
                     user_id: <The User ID>,
                     authuser: -1});

ユーザーのIDを指定すると、マルチアカウントチューザーがバイパスされ、クライアントライブラリからのトークンの自動更新が再び機能するようになります。

参考までに、ユーザーフローに影響を与える他のURLパラメータは次のとおりです。

  • user_id:(authuserマルチアカウント選択画面をバイパスする)と同様ですが、メールアドレス(例:bob@gmail.com)またはOpenIDConnectエンドポイント/Google+API /UserInfoAPIから取得したユーザーIDを使用できます
  • approval_prompt:デフォルトは、承認/付与画面が確実に表示autoされるように設定できます。forceこれにより、ガント画面が後続の認証でバイパスされないようになります(初回以降)。
  • immediateimmediateは少し注意が必要です。設定すると、ユーザーが以前に承認を付与した場合trueは付与画面(のようなものapproval_prompt=auto)をバイパスしますが、ユーザーが以前に承認を付与していない場合は、次のエラーでリダイレクトされますerror=immediate_failed。これに設定するfalseと、特別な動作は追加されないため、値によって動作設定にフォールバックしapproval_promptます。

注:immediate=trueapproval_prompt=forceは無効な組み合わせです。

クライアントライブラリはパラメータを使用していると思います。そのimmediateため、彼がパラメータを取得するerror=immediate_failedと、パラメータなしで認証フローが再開されますが、それはauthuser推測にすぎません:)

于 2012-11-14T13:11:47.740 に答える
3

http://code.google.com/p/google-api-javascript-client/issues/detail?id=11によると、 マルチログインはJavascriptクライアントではサポートされていません

于 2012-11-14T17:04:20.427 に答える
3

OAuth許可アクセスページは、即時モードでない場合にのみ表示されimmediateます。パラメーターをfalseに設定すると、期待どおりに機能しますか?

于 2012-11-13T18:15:35.050 に答える
0

authuserパラメーターに注意してください。たとえば、これを「2」に設定すると、すでに認証されている場合でもログインを求めるプロンプトが表示されます。

于 2013-04-10T21:07:01.663 に答える