使Google Oauth在子域中在本地工作

时间:2016-12-08 18:55:05

标签: asp.net oauth asp.net-identity google-oauth2

我正在开发一个使用ASP.NET身份的网站,该网站将使用来自here的一些信息来识别客户端的子域名我已经在本地工作了子域名,但我无法使用它的OAuth。

例如,如果我到https://localhost:44301并尝试使用Google登录,一切都很好。在我的Google控制台中,我在“授权的JavaScript来源”下有https://localhost:44301,在“授权的重定向URI”下有https://localhost:44301/signin-google。但是当我转到https://foo.localhost:44301时,Google会回复:

  

错误:invalid_request

     

redirect_uri的参数值无效:不允许使用非公共域:https://foo.localhost:44301/signin-google

当您尝试登录时。我可以在Google控制台中将https://foo.localhost:44301添加到“授权的JavaScript来源”,但它不会让我在授权的重定向URI下添加https://foo.localhost:44301/signin-google,因为它会抱怨:

  

无效重定向:https://foo.localhost:44301/signin-google必须以公共顶级域名(例如.com或.org)结尾

其他一些questions and answers建议将所有子域重定向到OAuth的单个域,但理想情况下我想保留每个子域的登录。因此,如果您使用谷歌将其签名为foo.mydomain.com,它将与bar.mydomain.com分开,如果我必须将两者重定向到同一个域,我认为这不会起作用(尽管我是如果没有Google中的单独项目,我们就不确定是否可行。

1 个答案:

答案 0 :(得分:1)

Google和其他OAuth2 / OIDC提供商通常会支持重定向到子域。您的具体问题是,您似乎正在尝试使用printf的子域名,这些子域名位于特殊用途域名(RFC6761)列表中,而Google似乎还有其他限制因素。

但是,这不是一个真正的限制,因为在制作过程中,您将使用来自您将拥有特定子域的公共顶级域名。

如果您需要将其用于本地开发,可以使用localtest.me来设置您喜欢的子域(double distance(xdist, ydist) { return sqrtf(pow(xdist, 2.0) + pow(ydist, 2.0)); } int main() { double x1, y1, x2, y2; double xdist, ydist, dist; int i; for (i = 1; i <= 2; i++) { printf("%d: Enter an x and y coordinate:\n", i); switch (i) { case 1: scanf("%lf", &x1); scanf("%lf", &y1); continue; case 2: scanf("%lf", &x2); scanf("%lf", &y2); continue; } } xdist = fabs(x2 - x1); ydist = fabs(y2 - y1); dist = distance(xdist, ydist); printf("\nxdist = %.2f, ydist = %.2f\n", xdist, ydist); printf("The distance between coordinates \n(%.2f, %.2f) to (%.2f, %.2f) \nis %.2f.", x1, y1, x2, y2, dist); return 0; } localhost),同时确保域将解析为您的本地计算机(foo.localtest.me)。这应该会阻止谷歌抱怨它......