错误 400:redirect_uri_mismatch 使用 gmail api (.net)

Error 400: redirect_uri_mismatch when using gmail api (.net)

好的,所以我正在尝试在这个项目上实现 Gmail API,我想做的就是发送电子邮件,这就是我目前得到的结果:

  1. 在 google 开发者控制台注册一个新项目,启用 gmail API 并配置同意屏幕。
  2. 在同意屏幕中,我刚刚更改了 gmail.send 的应用程序名称和范围。

  3. 将我的凭据创建为 webapp,这就是我在重定向 uris 上放置的内容。

http://localhost/Home/Index

因为我正在使用 MVC 并希望将模板与主控制器和索引视图一起使用,所以我不知道这是否正确,但据我所知,我必须将页面写在它应该去的地方身份验证后,这是我项目中的唯一页面。

然后我下载credentials.json文件并添加到我的项目中,然后执行这段代码,ruta 是我的 credentials.json

的路径
UserCredential credential;
        using (var stream =
            new FileStream(ruta, FileMode.Open, FileAccess.Read))
        {
            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                Scopes,
                "user",
                CancellationToken.None).Result;
        }

之后我执行了程序,但我从未看到授权页面,而是出现了错误:

Error 400: redirect_uri_mismatch. The redirect URI in the request, http://127.0.0.1:62297/authorize/, does not match the ones authorized for the OAuth client.

我尝试将该 URI 作为“http://localhost/authorize" and "http://localhost/authorize/”添加到我的重定向 URI,但我不断收到相同的错误消息。

我是新手,所以我对所有这些重定向 uris 有点迷茫,感谢您的回答

google 开发者控制台中的重定向 uri 必须与您发送的控制台完全匹配。它基本上告诉 Google 的授权服务器你想要

Error 400: redirect_uri_mismatch. The redirect URI in the request, http://127.0.0.1:62297/authorize/, does not match the ones authorized for the OAuth client.

意味着您正在从 http://127.0.0.1:62297/authorize/ 发送并且尚未在您的 google 开发者控制台中为该项目添加此端口。凭据返回到。

显示如何解决此问题的视频:How the fix redirect_uri_mismatch error. Part 2

需要静态端口。

如果端口号发生变化,这是您项目开发环境的问题,您需要将项目设置为使用静态端口,您可以将其添加到 Google 开发者控制台。

MVC 与安装的应用程序

您在问题中声明您正在使用 MVC,但您使用的代码 GoogleWebAuthorizationBroker.AuthorizeAsync 是如何设计用于已安装的应用程序的。当它运行时,它将在 运行 关闭的机器上启动同意 window 浏览器。这不适用于 Web 应用程序,因为它会尝试在服务器上启动它无权访问的浏览器。

改为使用GoogleAuthorizationCodeFlow

这是对我有用的例子。 Authorised JavaScript origins: 127.0.0.1 Authorised redirect URIs: 127.0.0.1/oauth/complete/google-oauth2 我们不应该在 main url 之后使用任何端口号。删除端口号。就这样。 转到此处并更正重定向 urls: `

https://console.cloud.google.com/apis/credentials/oauthclient/

`