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

Create one or multiple projects for OAuth 2.0 for the company websites in different countries? (different prefix in URL and local content)

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

我们现在有大约 50 个网站,其中一些是 "company websites",然后我们有 "product websites",等等。

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

我正在寻求推荐,因为我无法决定哪个更好: 1) 每个网站创建一个项目,然后为环境(prod、staging、dev)创建不同的客户端 ID——这将是 50 个项目,每个项目有 3 个客户端 ID 2) 每组创建一个项目 - 例如公司网站会有一个项目,我会为每个国家和每个环境创建新的客户 ID。这样我可能会有 5-6 个项目,每个项目有 10-20 个客户端 ID。

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

I am seeking a recommendation as I cannot decide what is better:

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

Can those company websites all use the same application, or they should not?

答案是"it depends"。如果他们都共享一个共同的域名根,并且他们在根进行认证,就很容易实现。身份验证 cookie 可以跨域共享。否则,您将需要使用多个 redirect_urls 以便一个站点上的身份验证在同一站点上完成。我不确定每个客户端 ID 的重定向 URL 限制是多少。

到你问题的第二部分"or they should not"。如果网站被设计成看起来像同一家公司,那么客户将期望只进行一次身份验证并在所有网站上获得授权。这是个好主意吗,是的。是不是正确的想法,这个要看你的安全需求,隔离需求等等。这里没有简单的答案。

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

因此,当您开始 OAuth 舞蹈时,您始终指定相同的重定向 URL,它处理所有域的 OAuth。诀窍是你在舞蹈开始时包含一个 state 参数,它指示舞蹈结束后你的 OAuth 代码应该重定向到哪个 country/site。

所以,大致是这样的:-

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

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