我在网站上实施了Google oAuth(example.com)。一切正常,除了我网站上的子域名auth(我有几千个子域名)。当用户尝试通过子域进行授权时,例如
fr.example.com
product1.example.com
product2.de.example.com
我收到了Google的错误 -
The redirect URI in the request did not match a registered redirect URI
如何解决?
答案 0 :(得分:6)
这是因为Google的OAuth不支持通配符子域匹配。您可以参考更多文档here
答案 1 :(得分:3)
其他答案已经澄清,问题的原因是Google的OpenAuth不支持外卡子域。但是,您要问的是如何解决?嗯,根据this email thread,你有两个选择:
为所有子域提供单个OAuth2处理端点。也就是说,您拥有一个主域和端点,您也可以通过该域和端点对子域进行身份验证。完成身份验证后,您将重定向回子域。据说是一个OpenAuth state 参数,您可以在其中编码子域名。这就是我所做的,这里是代码:https://github.com/debiki/debiki-server/blob/master/app/controllers/LoginWithOpenAuthController.scala
您可以让每个子域名都与Google独立注册。
您选择的选项取决于要求Google用户批准的品牌。主域名还是子域名?
答案 2 :(得分:1)
重定向URI必须与Google Developers Console中为此项目列出的值之一完全匹配(包括http或https方案,大小写和尾随'/')。因此,如果您不在开发人员控制台中添加它们,它将不支持子域。
答案 3 :(得分:0)
这是因为Google的OAuth不支持通配符子域匹配。您可以重定向所有子域的一个静态页面,在验证或获取OAuth的访问令牌后,您可以返回带访问令牌的子域页面。
答案 4 :(得分:0)
在授权的 JavaScript 来源字段中,输入您的应用的来源。您可以输入多个来源,以允许您的应用在不同的协议、域或子域上运行。不能使用通配符。在下面的示例中,第二个 URL 可以是生产 URL。
http://localhost:8080 或 https://myproductionurl.example.com
https://developers.google.com/identity/sign-in/web/server-side-flow