我有一个现有的支持Google Drive的应用程序,它使用GoogleJava客户端库和服务器流身份验证。
如果您没有登录到应用程序并导航到URL,并且您在该浏览器上登录了多个google帐户(只能有一个个人Google帐户,任何其他帐户都必须是Google商业帐户),OAuth回调提供了选择使用哪个Google帐户的选项。
然而,在测试切换到使用JavaScript客户端库时,我无法使用gapi.auth.authorize激活多帐户选择屏幕。可以使用JS库处理多个帐户吗?
更新:我尝试了立即
参数false
。只要我不在弹出窗口中更改帐户,我就可以登录。如果我确实更改了帐户,我可以:
https://accounts.google.com/o/oauth2/auth?client_id=433863057149.apps.googleusercontent.com
在一个新的标签中,什么也没有发生。我制作了一个视频来演示。
更新2:针对JS客户端库需要双重选择多个帐户的这个错误已被接受。
根据http://code.google.com/p/google-api-javascript-client/issues/detail?id=11Javascript客户端不支持多登录
OAuth授予访问页面仅在非立即模式下显示,如果您将立即
参数设置为false,它是否按预期工作?
由于以下参数,您无法获得多用户选择屏幕:<code>authuser=0将选择第二个帐户等)。
目前无法使用客户端库删除该参数,因为如果没有值,客户端库会自动将其设置为0(这就是为什么它声称不处理多帐户),因此一种方法是将其覆盖为-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)或者您从我们的开放ID连接endpoint/Google API/UserInfo API获取的用户ID。approval_prompt
:默认值为auto
,可设置为强制
以确保显示审批/授权屏幕。这可确保在后续身份验证时(第一次之后)不会绕过甘特屏幕
immediate
:immediate
有点棘手,当设置为true
时,如果用户之前已经授予批准,它将绕过授权屏幕(有点像approval_prompt=auto
),但如果用户之前没有授予批准,您将被重定向到错误:error=immediate_failed
。如果设置为<code>false注意:立即 = true
和 approval_prompt = 强制
是无效的组合。
我认为客户端库正在使用立即
参数,以便如果他得到error=immediate_failed
它将在没有Authuser
参数的情况下重新启动身份验证流,但这只是推测:)
我的应用程序中有以下工作流: 用户登录我的自定义应用程序 用户点击一个按钮链接他们的YouTube帐户 应用程序使用下面的代码列表发出服务器端请求 用户被重定向到google auth url 此时,发生了两件事之一: [我从来不想要这种行为] - 如果用户只登录了一个谷歌帐户(即mail,谷歌域名应用套件等),则永远不会要求用户选择要链接的帐户。它只是假设他们想要使用他们登录的那个,并继续其快乐
我试着用谷歌搜索它,但在任何地方都找不到。 每个android手机都有一个google play store帐户,可让您访问play store。我正在制作一个使用Firebase Auth进行身份验证的应用程序,您使用Google Sign-In进行身份验证。Google Play帐户是否可用于身份验证?还是需要新电子邮件?
我正在开发一个android应用程序,它有可能提供大量的统计信息。我想把这些数据保存在我的谷歌硬盘上,以便以后分析。 然而,我对谷歌API是新手,几乎不知道如何通过编程方式授权我的帐户。这是我到目前为止的情况。 代码运行成功,文件已在设备上创建,但我想将其发送到我的google驱动器。 我认为主要问题是我不知道帐户名称凭据应该是什么。我有一种感觉,它不是“myacc@gmail.com”。有什么方
我正在尝试设置一个Android应用程序,该应用程序可以使用Google Drive REST API概述中的指南操作存储在我个人Google Drive帐户上的文件。 我按照示例代码允许用户连接到帐户,但无论是否选择帐户名称或按下取消按钮,“选择帐户”对话框都会不断重新出现。 我认为问题在于,在测试mCredential时,refreshResults()方法总是返回null。getSelect
在我们的网站上http://www.draw.io/右上角有一个使用JS API客户端库进行授权的Google Drive集成按钮。这在任何地方都可以正常工作,除了iOS6上的Safari。单击它时,一个新选项卡会短暂弹出,然后消失。从我们的日志记录中调用了我们的授权调用,但永远无法访问我们的回调函数。 我们遵循了此线程中的提示,以获得合理水平的多帐户处理工作,并且它在我们测试过的所有其他环境中都
我正在尝试授权我的应用程序与Google Drive集成。Google留档提供了基于服务器的授权的详细信息以及各种服务器技术的代码示例。 还有一个支持授权的JavaScript Google API库。在wiki的示例部分有一个用于创建配置和调用授权函数的代码片段。我已经将范围更改为我认为驱动器所需的范围: 回调函数从未被调用(是的,Google API库已被正确加载)。查看Java检索和使用OA