错误 400:redirect_uri_mismatch 试图访问 Google 驱动器

Error 400: redirect_uri_mismatch trying to access Google Drive

我知道已经有很多这样的问题,但是 none 的答案对我有帮助。我在最后列出了所有建议的要点,请阅读那里看看我是否遗漏了什么。

我正在使用 Google 驱动器 C# API,并且有一个运行良好的网站(Blazor、.NET5,以防有任何不同)。为此,我使用了客户端的 Google 凭据,下载了一个 JSON 文件 (following instructions here),一切正常。当我在 Visual Studio 中首次 运行 网站时,我得到了 Google 身份验证屏幕,我在其中输入了他的电子邮件和密码,并且成功了。这在我的网站中创建了一个 JSON 文件,然后允许我下次 运行 该网站而无需再次授权。

在凭据 JSON 文件中,我添加了重定向 URI,使用 VS 在调试站点时使用的 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 帐户,并希望我使用它。没问题,我转到了新帐户的 Google 开发人员控制台并执行了与以前相同的操作,即配置了 OAuth 屏幕,创建了一个新的 OAuth 凭据,下载了 JSON 文件,添加了重定向 URI如上所示,并将现有的 JSON 文件替换为新文件。

当我尝试调试时,出现标题中显示的错误。

阅读了大量关于此错误的其他问题后,我检查并 double-checked 以下...

None 这有帮助,我总是得到同样的错误。

奇怪的是,如果我现在将我的凭据 JSON 文件恢复到之前的状态(使用客户自己的 Google 帐户),我会得到同样的错误。

有人有什么想法吗?据我所知,我已经尝试了其他答案中提到的所有内容,但仍然出现此错误。

嗯,看了你的(顺便说一句很清楚!)问题给我的印象是你所做的所有更改都在 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,但这是Google!

更新控制台后,下载 JSON 并将新版本包含在您的应用程序中。

无论如何,试试看是否有效。