错误 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 REST API:400错误请求+失败的前提条件
Google Gmail API OAuth 2.0 错误 400:redirect_uri_mismatch
我在第79行的REST.php中有400个错误请求,实现了GMAIL Api PHP