我正在开发一个使用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中的单独项目,我们就不确定是否可行。
答案 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
)。这应该会阻止谷歌抱怨它......