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

Posted

技术标签:

【中文标题】错误 400:使用 gmail api (.net) 时的 redirect_uri_mismatch【英文标题】:Error 400: redirect_uri_mismatch when using gmail api (.net) 【发布时间】:2020-10-04 07:48:51 【问题描述】:

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

    在 google 开发者控制台注册一个新项目,启用 gmail API 并配置同意屏幕。

    在同意屏幕中,我刚刚更改了 gmail.send 的应用名称和范围。

    将我的凭据创建为 web 应用程序,这就是我在重定向 uris 上放置的内容。

http://localhost/Home/Index

由于我正在使用 MVC 并希望将模板与 Home 控制器和索引视图一起使用,我不知道这是否正确,但据我所知,我必须编写应该在身份验证,这是我项目中唯一的页面。

然后我下载 credentials.json 文件并将其添加到我的项目中,然后执行此代码,ruta 是我的路径凭证.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;
        

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

错误 400:redirect_uri_mismatch。 请求中的重定向 URI,http://127.0.0.1:62297/authorize/,与授权给 OAuth 客户端的不匹配。

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

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

【问题讨论】:

为什么不将 '127.0.0.1:6666/authorize' 添加到列表中 每次运行程序时端口号都会发生变化,我发现它实际上并不重要,我刚刚尝试将我所有的“localhost”URI 更改为“127.0.0.1”并且它有效,现在我需要看看哪个是有效的,但谢谢 【参考方案1】:

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

错误 400:redirect_uri_mismatch。请求中的重定向 URI http://127.0.0.1:62297/authorize/ 与授权给 OAuth 客户端的重定向 URI 不匹配。

表示您是从http://127.0.0.1:62297/authorize/ 发送的,并且尚未在您的谷歌开发者控制台中为该项目添加此端口。凭据返回到。

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

需要静态端口。

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

MVC 与已安装的应用程序

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

改为使用GoogleAuthorizationCodeFlow

【讨论】:

关于 GoogleWebAuthorizationBroker,我想从我提供的静态 gmail 帐户发送电子邮件,所以我想从服务器授权它并且不要求用户进行任何身份验证,因为他们不会使用他们的邮件全部,他们只会提供目标邮件我想要做的正确吗? 除非这是一个 gsuite 域,否则您不能使用服务帐户来授权您的请求。您将不得不使用 Oauth2,问题在于它需要预先授权,或者它会请求用户访问他们的 gmail 帐户。为此,您需要保存创建的凭证文件并使用它来发送您的邮件。如果您使用 MCV 执行此操作,我不知道您将如何实现这一目标。您可以尝试创建自定义 idatastore 并使用它覆盖文件数据存储。但如果您使用 ASP .net 核心,我认为这行不通。 “使用静态端口”如何? 这取决于您使用的 IDE。 visual studio

以上是关于错误 400:使用 gmail api (.net) 时的 redirect_uri_mismatch的主要内容,如果未能解决你的问题,请参考以下文章

使用服务帐户的 Gmail API 集转发

Gmail REST API:400错误请求+失败的前提条件

Google Gmail API OAuth 2.0 错误 400:redirect_uri_mismatch

我在第79行的REST.php中有400个错误请求,实现了GMAIL Api PHP

收件人地址需要代码”:400 在 Laravel PHP 中使用 Gmail API 发送电子邮件

尝试使用服务帐户读取 GMAIL 时出现错误代码 400