Google OAuth 2.0 "error" : "redirect_uri_mismatch"

Google OAuth 2.0 "error" : "redirect_uri_mismatch"

我花了一天时间,摔碎了一个玻璃杯,我真的很生气,我不明白google想要我什么,有什么错。

我在开发者控制台中启用了 Google+ Api , 创建了新的 OAuth 客户端 ID

    $ch = curl_init('https://accounts.google.com/o/oauth2/token');
curl_setopt($ch,CURLOPT_POSTFIELDS,'code=4%2FPp1GWqC6PIr3wNYrZ5kK4T9oitxBoo0fBqBrVNQfE-g.ElKDUjQ7E28SoiIBeO6P2m-0RPaolgI&grant_type=authorization_code&redirect_uri=https%3A%2F%2Fmyprivatedomain.local.com%2Foauth2callback&client_id=%mycliet_id%&client_secret=%mysecret%');
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
var_dump(curl_exec($ch));

按照此处的说明创建所有内容:https://developers.google.com/+/web/signin/server-side-flow,gplus 按钮出现在页面上,它成功请求授权用户访问。但是当我执行第 8 步时 第 8 步:初始化 Google API 客户端库并启动 Google+ 服务 我的请求每次都得到响应 "error" : "redirect_uri_mismatch"

我知道,当你没有在 Google 控制台中注册 redirect_uri,或者当你在其中输入错误时,会出现这个错误,但我注册了它,也只是为了测试尝试设置不同的 url(更改域名,将协议从 https 更改为 https),但它从未奏效!我不知道我还能检查什么,请至少提供一些建议。

文档在步骤 1 中说。https://developers.google.com/+/web/signin/server-side-flow#step_1_create_a_client_id_and_client_secret 不能配置重定向 URI,只能配置 "Authorized JavaScript origins"。在授权请求和令牌交换中,redirect_uri参数值应设置为postmessage.

编辑: 现有技术:Google OAuth 2 authorization - Error: redirect_uri_mismatch

只是 运行 我自己解决了这个问题。就我而言,我的凭据是为已安装的应用程序设置的,不是网络应用程序。好像Installed applications不能配置成redirect URLs。我创建了一个新凭证作为 web application,这让我可以选择设置一系列 redirect url

根据这个和其他答案的建议,我确保 URL 匹配(复制粘贴)并且这对我来说功能正常。我也在隐身 Window.

中做到了这一点

结果是我的浏览器被转发到 URL 我在 redirect_url 参数中放入了一个特殊的查询字符串参数 code 填充了用于下一步的代码.

如果在使用 Google IAP 时看到这个,如果您尝试在浏览器中访问您的 URL,您将收到消息:

  1. That’s an error.

Error: redirect_uri_mismatch

The redirect URI in the request, [your_url]/_gcp_gatekeeper/authenticate, does not match the ones authorized for the OAuth client. To update the authorized redirect URIs, visit: https://console.developers.google.com/apis/credentials/oauthclient/?project=[your_project_id]

如果您访问 URL 它会为您提供(或间接通过 the console >> 单击正确 "OAuth 2.0 client ID" 上的编辑),在 "Authorised redirect URIs" 部分,确保您设置了 [your_url]/_gcp_gatekeeper/authenticate URL。

_gcp_gatekeeper/authenticate 部分绝对是必需的。

Google return 400 错误,因为重定向 URI 不匹配。

有两个问题:

  1. setRedirectUri 设置为 http,服务器 运行 在 https 和 将访问类型设置为在线(用于生产)
$client = new Google_Client();
$client->setAuthConfig(_DIR_ . '/../public/client_secrets.json');
$client->setRedirectUri('https://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php');
$client->setAccessType('online');
$client->addScope('https://www.googleapis.com/auth/analytics.readonly');
  1. 在我的授权配置文件中 (client_secrets.json)。我改变了 redirect_uris、client_id、project_id 和 client_secret
{
"web":{
  "client_id":"GOOGLE_CLIENT_ID",
    "project_id":"PROJECT_ID",
    "auth_uri":"https://accounts.google.com/o/oauth2/auth",
    "token_uri":"https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs",
    "client_secret":"CLIENT_SECRET",
    "redirect_uris":["https://DOMAIN_NAME.com/social-auth/google/callback",
              "http://localhost:8000/oauth2callback.php"],
  "javascript_origins":["https://localhost","http://localhost:8000"]
    }
}