Google OAuth2.0允许非测试用户使用

17
我正在开发一个Web应用程序,允许用户使用OAuth2.0使用其Google帐户登录。我创建了OAuth2.0客户端ID,并将OAuth同意屏幕配置为“测试”发布状态,并添加了一个测试用户。
我的应用程序前端使用React构建,我正在使用一个包(react-google-login)来处理流程。我可以成功地使用我添加为测试用户的Google帐户进行登录,并检索所需的基本个人资料信息。
问题是我也可以使用其他未添加到测试用户列表中的Google帐户进行登录。我想象Google不应该为不在测试用户列表中的帐户发出访问令牌。
我觉得我对OAuth流程有所误解,或者我配置了某些东西不正确。如果有任何指针,我会很感激。
谢谢。

你们的测试用户列表存储在哪里?你们在Google Cloud上使用的是哪个产品?Cloud Identity Platform吗? - guillaume blaquiere
我正在使用普通的Gmail帐户。测试用户列表位于oauth同意屏幕配置页面(在API下)。 - Centaurian
3
@Centaurian,你解决了这个问题吗?我也遇到了使用Google OAuth2时的同样问题。 - Augusto Destrero
很抱歉,@AugustoDestrero,不行。 - Centaurian
我也遇到了同样的问题...有人找到解决方法了吗? - Jason
显示剩余3条评论
3个回答

12

确实存在缺陷。

我和你当时遇到了相同的问题,认为自己可能误解了什么。在反复检查代码无果后,我在 Stack Overflow 上发布了一个帖子,被建议向 Google 的漏洞跟踪系统发帖报告。在与 Google 进行一些故障排除后,他们确认了这个 bug,并正在努力修复它(已有一段时间了)。

我在与 Google 谈话时使用了这个线程作为例子。我本来想在与他们联系后在这里发布更新,但是我忘了,抱歉!

更多详细信息的 buganizer 线程: https://issuetracker.google.com/issues/211370835


2
这很令人困惑,这个 bug 已经超过一年了还没有修复。 - Vololodymyr
我认为这个问题是文档的问题,并且这种行为是有意的。他们似乎将其视为一个漏洞,但是有点模糊不清,我有一种预感,那个帖子中的谷歌员工并没有完全理解。或者现在他们明白了,但没有人去更新这个问题。我已经在一个单独的答案和问题中发布了更多细节,但可以说,对于只使用Google进行登录的网站来说,发布流程毫无意义,这些网站仍然未发布,并且如果Google更改此设置,它们将会崩溃。谷歌应该让所有这些更加明显。 - cesoid

3

我不是谷歌的员工,因为文档很混乱,所以这个答案并不是最终确定的,但是相当肯定:

这个问题出在接口和文档上,而不是行为上。他们不太可能改变行为。当我尝试“发布”我的应用程序时,它要求我告诉他们为什么我“需要访问敏感和/或受限制的用户数据”。我的应用程序(以及你的应用程序,似乎也是如此)没有请求任何谷歌定义为敏感或受限制的内容,这意味着我们无法发布。在你的情况下,你不想发布,因为你的网站仍在开发中。在我的情况下,我的网站已经上线,并且正在使用Google登录,但是我不能“发布”(按照他们的定义),因为我不要求敏感信息,因此无法描述我将要做什么。如果谷歌改变了他们的行为,像我这样的网站将停止工作。

令人困惑的是,“发布”状态(可能)并不是旨在保护您的应用程序的一种方式,而是旨在保护他们的用户信息的一种方式。换句话说,当他们防止非测试帐户登录时,他们防止您访问用户信息,而不是防止用户访问您的网站。发布时,您必须验证您是否有权访问此信息。如果您没有请求敏感信息,则他们不必保护其用户免于登录。

如果他们希望我发布,只要他们让这成为可能,我就会乐意这样做。(事实上,整个过程让我感到紧张,我已经考虑过请求访问某些微不足道的“敏感”内容,以便我可以完成验证过程并“发布”,但我担心这将阻止一些用户登录,而且我不喜欢拥有不必要的用户信息。)

换句话说,您应该从您的角度锁定您的应用程序。Google应该停止称呼这种状态为“已发布”和“测试”,并更加一致地记录事物。他们应该给那些因此(意外地)允许人们登录的应用程序发送电子邮件,并为他们提供轻松关闭该访问权限的选项。

我有点像那个说你不应该依赖这些设置来防止人们访问你的应用程序的人。在某种程度上,“那个人”有一定的道理,但是,人们希望设置能够做到它字面上所说的事情,即使它在其他地方也说过它不会这样做。

这个答案基本上就是我在这个问题上写的,别人开了一个关于这个主题的问题:https://issuetracker.google.com/issues/211370835#comment33。希望 Google 能够确认或否认我的解释,并可能改进他们处理这些问题的方式。


2
你是否只需要“电子邮件”范围?似乎测试用户筛选器以及整个“应用程序”处于测试模式的概念仅存在于同意屏幕功能中。由于某些原因,如果您仅请求电子邮件,则Google不会显示同意屏幕。因此...也许这意味着您不需要同意屏幕,因此不需要关心该功能对您的应用程序的看法(即您的应用程序处于测试模式并且需要在进入生产之前进行验证)。或者也可能是一个错误?或者只是因为您可以这样做,并不意味着Google的条款允许这样做。也许他们只是没有实现防止这种情况的使用。无论如何,如果您添加更重要的范围,例如日历API,则以下内容将发生变化:非测试用户将收到消息“开发人员未授予您对此应用程序的访问权限”,并且无法完成oauth;测试用户将收到消息“Google尚未验证此应用程序”;测试用户将看到同意屏幕。基本上,一切都开始按预期工作。顺便说一下,“电子邮件”或“个人资料”范围似乎是旧方法,所有更新的范围都希望您为范围使用完整的URL(尽管Google在配置范围时未使用完整的URL)。例如,如果您想要电子邮件和日历范围,则可以将此值放入您的“scope”字段中:
email https://www.googleapis.com/auth/calendar

或者您可以使用这个等价值:

https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/calendar

并不是建议您仅仅为了添加一个像电子邮件这样的作用域而去添加它,只是它可以阐明问题所在,如果您确实需要这样的作用域,添加它将解决您的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接