为不同国家/地区的公司网站创建一个或多个 OAuth 2.0 项目?(网址和本地内容中的前缀不同)



我正在Google开发人员控制台中开发一个结构来创建项目,并为我们公司网站配置OAuth 2.0客户端ID。这些我们用来集成谷歌登录到网站。

我们现在有大约50个网站,其中一些是"公司网站",然后我们有"产品网站"等这样的组。

例如,一组公司网站 - 这些网站具有完全相同的设计,相同的目的,但特定于国家/地区,因此: - 国家/地区前缀不同,例如 countryA.companyxy.com、countryB.companyxy.com - 内容不同(内容类型相同,但意图本身与国家/地区有关,因此是本地的( - 语言可以不同(虽然主要是英语(

我正在寻求建议,因为我无法决定什么更好: 1( 为每个网站创建一个项目,然后为环境(生产、暂存、开发(创建不同的客户端 ID - 这将是 50 个项目,每个项目有 3 个客户端 ID 2(每个组创建一个项目 - 例如,公司网站将有一个项目,我将为每个国家和每个环境创建新的客户ID。这样,我可能会有 5-6 个项目,每个项目有 10-20 个客户端 ID。

这些公司网站可以使用相同的应用程序,还是不应该?

如果我理解正确的话,这是一个相当标准的多租户应用程序,其中单个应用程序(从Google的角度来看(位于多个域中。您可以使用单个项目和单个客户端 ID,因为在这两种情况下,ID 都与应用程序相关,而不是与应用程序所在的域相关。

因此,当您启动 OAuth 舞蹈时,您始终指定相同的重定向 URL,该 URL 处理所有域的 OAuth。诀窍是您在舞蹈开始时包含一个state参数,该参数指示您的OAuth代码在舞蹈完成后应重定向到哪个国家/站点。

所以,大致是这样的:-

  1. 用户访问 countryA.companyxy.com 并请求 Oauth(例如,单击登录按钮(
  2. 您重定向至 accounts.google.com?redirect_uri=common.companyfoo.com/oauth&state=countryA.companyxy
  3. 身份验证后,谷歌将重定向回 common.companyfoo.com/oauth?state=countryA.companyxy
  4. 您的 oauth 处理程序执行其操作,然后解析状态参数并重定向回 countryA.companyxy.com

当然,您的公司可能出于管理原因更喜欢多个项目和/或客户 ID,具体取决于您对管理的热情以及您希望如何细分数据。为了以云端硬盘为例来解释最后一点,如果所有公司都有相同的项目,那么 drive.file 范围将授予他们对应用程序创建的文件的所有访问权限。但是,如果您为每个公司都有一个项目,则Google会将这些项目视为由不同的应用程序创建,因此使用drive.file范围不可见。

我正在寻求建议,因为我无法决定什么更好:

我会将文件夹/项目与公司组织以相同的结构对齐,并倾向于更多项目(分离(而不是合并。试着想想指挥链和资源的分配。考虑您希望如何隔离资源的安全性。这可能有助于弄清楚什么应该去哪里。将开发与生产资源分开(单独的项目(。

这些公司网站是否可以都使用相同的应用程序,或者它们 不应该吗?

答案是"视情况而定"。如果它们都共享一个通用域名根,并且它们在根身份验证,则非常容易实现。身份验证 Cookie 可以跨域共享。否则,您将需要使用多个redirect_urls以便一个站点上的身份验证在同一站点上完成。我不确定每个客户端 ID 的重定向 URL 的限制是多少。

对于您问题的第二部分"或者他们不应该"。如果网站设计为看起来像同一家公司,那么客户将期望只进行身份验证一次,并在所有网站上获得授权。这是个好主意吗,是的。这是正确的想法,这取决于您的安全要求,隔离需求等。这里没有简单的答案。

最新更新