Google oauth子域

ale*_*oid 6 oauth oauth-2.0 google-oauth

我已经在网站(example.com)上实现了Google oAuth。除了我站点上子域的auth(我有成千上万个子域)的授权外,其他一切都正常。例如,当用户尝试通过子域进行授权时

fr.example.com
product1.example.com
product2.de.example.com
Run Code Online (Sandbox Code Playgroud)

我收到来自Google的错误-

The redirect URI in the request did not match a registered redirect URI
Run Code Online (Sandbox Code Playgroud)

如何解决?

anf*_*fab 7

这是因为Google的OAuth不支持通配符子域匹配。您可以在此处参考更多文档

  • @KajMagnus它确实支持子域,但不支持通配符子域匹配。本质上,redirect_uri必须与开发者控制台中注册的值之一完全匹配。因此,您可以为子域添加一堆redirect_uri,它应该可以正常工作。 (2认同)
  • @anfab您知道是否可以通过Google API添加redirect_uris,还是必须通过Web界面添加? (2认同)

Kaj*_*nus 5

其他答案已经阐明,造成麻烦的原因是Google的OpenAuth不支持通配符子域。但是,您要问的是如何解决?好吧,根据此电子邮件线程,您有两种选择:

  1. 为所有子域提供一个OAuth2处理终结点。也就是说,您将拥有一个主域和一个端点,通过它们您还可以对子域进行身份验证。完成身份验证后,您将重定向回子域。可能有一个OpenAuth 状态参数,您可以在其中编码子域名。这就是我所做的,这里是代码:https : //github.com/debiki/debiki-server/blob/master/app/controllers/LoginWithOpenAuthController.scala

  2. 您可以让每个子域分别向Google注册。

您会选择哪个选项,取决于要求Google用户批准哪个品牌。主域还是子域?

  • 然而我没有那么做。相反,当用户位于“*.domain.com”(例如“sub5.domain.com”)时,我将他/她重定向到“login.domain.com”并通过该域登录。因此,我在 Google OpenAuth 中列出的唯一端点是“https://login.domain.com/authenticate/google”。当有人登录时,谷歌总是询问她/他是否想信任*那个*域,而不是“sub5”。通过 cookies 和服务器端缓存和重定向,我确保用户在“sub5”登录。 (2认同)