Google OAuth api 白名单不适用于本地主机和 public ip

Google OAuth api whitelist not working on localhost and public ip

编辑:

所以 Google OAuth 存在很多问题,而不仅仅是原始问题中的问题。但我还是把它放在底部作为其中之一的例子。


新问题:

Google OAuth API 一直显示错误:Not a valid origin for the client: <some_url> 即使我将站点添加到 Authorized JavaScript origins

主要是关于 localhost 和 public IP 还没有域名。


原问题:

您好,我在浏览器中尝试使用 Google OAuth2.0 API 登录时遇到错误。

错误说:

{
error: "idpiframe_initialization_failed",
details: ""Not a valid origin for the client: https://localhost has not been whitelisted for client ID <CLIENT_ID>.apps.googleusercontent.com. Please go to https://console.developers.google.com/ and whitelist this origin for your project's client ID.""}

其中 <CIENT_ID> 是由 google api

提供的实际客户端 ID

我启用了所有这些来源:

我在 nginx 服务器上打开了所有这些端口

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    listen 8000 default_server;
    listen [::]:8000 default_server;

    listen 5000 default_server;
    listen [::]:5000 default_server;

    # SSL configuration
    #
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    listen 4343 ssl default_server;
    listen [::]:4343 ssl default_server;
    #
    # Note: You should disable gzip for SSL traffic.
    # See: https://bugs.debian.org/773332
    #
    # Read up on ssl_ciphers to ensure a secure configuration.
    # See: https://bugs.debian.org/765782
    #
    # Self signed certs generated by the ssl-cert package
    # Don't use them in a production server!
    #
    include snippets/snakeoil.conf;

这里有颜色:

它们都指向同一个网站并且它们都有效,除了:

http://localhost
http://localhost:80
https://localhost
https://localhost:443

使用其他端口我可以登录,但不能使用那些基本端口。

我看到很多类似的问题都通过删除缓存来回答,但在 Vivaldi (chromium) 和 Firefox(在问这个问题之前第一次使用)上可以看到相同的行为

我想我找到了问题。

每次我忘记将位置放入白名单来源时,都会发生一些事情,我的浏览器缓存会记住这个来源不在白名单中,即使将位置添加到白名单后,错误仍然显示。

我不得不清除浏览缓存(为了以防万一,我还删除了应用程序缓存)以恢复行为。

从现在开始,我将在不同的浏览器上测试我的网站,以便我可以自由删除浏览数据。

此外,出于某种原因,您不能在白名单中拥有 IP,因此您必须使用一些 shannanigans,例如 .xip.io,这只是一个域,当您访问 <some_ip>.xip.io:<some_port> 它 return s ip 是 <some_ip>:<some_port>(你可以省略 :<some_port> 这样它将 return <some_ip>

而且localhost简直是一团糟

我也没有设法使端口 80 和 443 在本地主机上工作,但我认为它在 public 服务器上工作 .xip.io

所以

我推荐:

  • 最好使用域名
    • 否则避免使用 public 类似 .xip.io
    • 的 IP
    • localhost 上使用 127.0.0.1 以防万一,也使用 .xip.io
  • 使用 burner 浏览器(或私人模式,如果它适合你,但我想测试它是否在默认环境中工作)如果你搞砸了(和你可能会)
  • 只需为本地主机使用备用端口