-->

是否有可能能够正确地选择任何可用的谷歌帐户,通过驱动用JS客户端库使用授权时使用?(Is it po

2019-06-21 03:55发布

我有一个是一个使用谷歌的Java客户端库和服务器流量AUTH现有的谷歌驱动器启用的应用程序。

如果你没有登录到应用程序,并导航到URL和您登录到多个谷歌帐户上的浏览器(只有一个个人帐户谷歌有可能,任何额外的人必须是谷歌的商业帐户)的OAuth的回调报价在选项中选择要使用的谷歌帐户。

然而,虽然测试开关使用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 /认证/ 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&代理= oauth2relay593063763&RESPONSE_TYPE =令牌状态= 701344514&AUTHUSER = 1

在新标签页并没有任何反应。 我做了一个视频来演示 。

更新2: 此bug反对为需要多张帐户的双重选择的JS客户端库已被接受。

Answer 1:

你没有得到,因为以下参数的多用户选择屏幕: authuser=0这将自动选择您正在登录的第一个帐户( authuser=1将选择第二等)。

这是目前无法使用客户端库移除PARAM因为客户端库会自动将其设置为0(这就是为什么它声称不处理多账户)如果没有值,因此一个方法是重写它为-1例如,这将显示多帐户选择。 然后,你还可以要求访问该用户的个人资料或电子邮件的同时你要访问其他API和获取用户或其ID的任何电子邮件。 然后在随后的权威性,你可以指定user_id PARAM其中港岛线绕过用户选择屏幕。

因此,在实践中,第一个授权是这样的:

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});

上述唯一的问题是,客户端库的自动刷新不起作用,因为每一个AUTH将被挡在多帐户选择屏。

诀窍是让使用用户信息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,以确保多帐户选择是绕过,并允许从客户端的lib令牌的自动刷新重新工作。

作为参考,其他的URL PARAM影响用户流量是:

  • user_id :比同类authuser (绕过多帐户选择屏),但你可以使用电子邮件地址(例如bob@gmail.com),或者从我们的开放ID连接端点/谷歌+ API / API的UserInfo获取用户ID
  • approval_prompt :默认为auto ,可以设置为force ,以确保批准/授屏幕获得展示。 这可确保GANT屏幕不绕过后续身份验证(第一次以后)。
  • immediateimmediate是有点棘手,当设置为true它会绕过授权屏幕(有点像approval_prompt=auto )如果用户已经获得批准之前,但是如果用户没有得到批准之前,你会得到一个错误重定向: error=immediate_failed 。 如果设置为false也不会添加特殊的行为,并因此由行为设定后备approval_prompt值。

注意: immediate=trueapproval_prompt=force是无效的组合。

我认为客户端库是使用immediate PARAM所以,如果他得到error=immediate_failed将重启没有一个验证流程authuser PARAM,但这只是猜测:)



Answer 2:

当没有在即时模式下,它的工作原理,如果你设定为预期的OAuth授予访问权限页面仅显示immediate参数设置为false?



Answer 3:

据http://code.google.com/p/google-api-javascript-client/issues/detail?id=11多登陆之前,没有JavaScript客户端支持



Answer 4:

注意AUTHUSER参数。 设置为“2”,例如,你会被提示输入即使您已经验证的登录。



文章来源: Is it possible to be able to correctly select any available Google account to use when using authorisation via the JS client library for Drive?