错误 400:redirect_uri_mismatch 尝试访问 Google Drive
Posted
技术标签:
【中文标题】错误 400:redirect_uri_mismatch 尝试访问 Google Drive【英文标题】:Error 400: redirect_uri_mismatch trying to access Google Drive 【发布时间】:2022-01-02 06:34:58 【问题描述】:我知道已经有很多这样的问题,但没有一个答案对我有帮助。我在最后列出了所有建议的要点,请阅读那里,看看我是否遗漏了什么。
我正在使用 Google Drive C# API,并且有一个运行良好的网站(Blazor、.NET5 以防万一)。我为此使用了客户端的 Google 凭据,下载了一个 JSON 文件 (following instructions here),一切都很好。当我第一次在 Visual Studio 中运行该网站时,我得到了 Google 身份验证屏幕,我在其中输入了他的电子邮件和密码,并且它工作正常。这在我的网站中创建了一个 JSON 文件,然后允许我下次运行该网站而无需再次进行身份验证。
在凭证 JSON 文件中,我使用 VS 在调试站点时使用的 URI 添加了重定向 URI。这给了我这样的 JSON 文件...
"web":
"client_id": "xxxxxxxxxxxxxxxx",
"project_id": "xxxxxxxxxxxxxxx",
"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": "xxxxxxxxxxxxxxxxxxxxx",
"redirect_uris": [
"https://localhost:44378/authorize/",
"https://localhost:44378/authorize"
],
"javascript_origins": [
"https://developers.google.com"
]
我用于创建 Google 服务的代码与他们的 .NET Quickstart 非常相似(第 2 步)...
UserCredential credential;
using (FileStream stream = new(credJson, FileMode.Open, FileAccess.Read))
credential = GoogleWebAuthorizationBroker
.AuthorizeAsync(GoogleClientSecrets.FromStream(stream).Secrets,
new[] DriveService.Scope.Drive ,
"user",
CancellationToken.None,
new FileDataStore(tokenPath, true))
.Result;
DriveService service = new(new BaseClientService.Initializer
HttpClientInitializer = credential,
ApplicationName = ""
);
一切都很好。现在客户专门为此站点设置了另一个 Google 帐户,并希望我使用该帐户。没问题,我去谷歌开发者控制台获取新账户,和之前一样,即配置 OAuth 屏幕,创建一个新的 OAuth 凭据,下载 JSON 文件,添加如上所示的重定向 URI,并替换现有的带有新文件的 JSON 文件。
当我尝试调试时,我得到了标题中显示的错误。
阅读了大量有关此错误的其他问题后,我检查并仔细检查了以下内容...
VS 使用的 URI 永远不会改变。具体来说,端口始终是 44378 在我调试时,Google 控制台和我的 JSON 文件中的基本 URI 是浏览器地址栏中的 exact URI,我刚刚添加了/authorize
,带有和不带有斜杠
Google 窗口显示的 URI 格式为 http://127.0.0.1:59777/authorize/,尽管端口号每次都会更改。 不是选择 VS 使用的端口。添加谷歌显示的那个是浪费时间,下次我尝试时,它会显示不同的端口
我尝试过使用127.0.0.1
而不是localhost
我已尝试从重定向 URI 中完全删除端口
我已尝试在 Google 控制台(并在需要时等待它们更新)和 JSON 文件中设置重定向 URI
创建凭据时,我将其设置为 Web 项目,而不是桌面项目
这些都没有帮助,我总是遇到同样的错误。
奇怪的是,如果我现在将我的凭据 JSON 文件恢复到以前的状态(使用客户自己的 Google 帐户),我会收到同样的错误。
有人有什么想法吗?据我所知,我已经尝试了其他答案中提到的所有内容,但仍然出现此错误。
【问题讨论】:
【参考方案1】:嗯,阅读您的(顺便说一句非常清楚!)问题给我的印象是您所做的所有更改都在 JSON 文件中,而不是在 Google 控制台中。如果我错了,请纠正我,但我认为这可能是您遇到问题的地方。
我的(诚然有限的)经验让我相信 JSON 文件中的重定向 URI 被忽略了,而使用的是 Google 控制台中的重定向 URI。
如果您已经尝试过,请原谅我,但请尝试将以下四个 URI 添加到您的控制台,然后再次下载 JSON 文件...
http://127.0.0.1/authorize/
http://127.0.0.1/authorize
https://127.0.0.1/authorize/
https://127.0.0.1/authorize
您已经意识到,您似乎需要包含带有和不带有斜杠的版本。我发现您通常还需要包含非 SSL 版本。不要问我为什么,因为VS在调试的时候使用https,但这是谷歌!
更新控制台后,下载 JSON 并将新版本包含在您的应用中。
不管怎样,试试看它是否有效。
【讨论】:
谢谢,解决了!我不敢相信我在这么简单的事情上浪费了这么多时间。如果忽略它们,您知道为什么它们甚至在 JSON 文件中包含 URI 吗?再次感谢 不知道。正如我所说,这是 Google! 您是如何将这些 URI 添加到控制台的?我遇到了同样的 URI 不匹配问题,但 Google Cloud Console 不允许我添加这些 IP 地址 URI 并给我这些错误:Invalid Redirect: must end with a public top-level domain (such as .com or .org).
Invalid Redirect: must use a domain that is a valid top private domain.
@Jamie 您要添加什么 URI?听起来像是特定的东西
我试图添加与该评论中相同的 IP 地址,但发现这些地址仅用于测试环境而不是生产环境,反之亦然。我不记得了。当我运行解决方案时,我能够让 IP 正常工作。谢谢以上是关于错误 400:redirect_uri_mismatch 尝试访问 Google Drive的主要内容,如果未能解决你的问题,请参考以下文章