错误 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 以下...
- VS 使用的 URI 永远不会改变。具体来说,端口始终为 44378
- Google 控制台和我的 JSON 文件中的基本 URI 是我调试时浏览器地址栏中的 exact URI,我只是添加了
/authorize
有和没有尾部斜线
- Google window 显示的 URI 的格式为 http://127.0.0.1:59777/authorize/,尽管端口号每次都不同。是不是获取VS使用的端口。添加一个 Google 显示是浪费时间,因为下次我尝试时,它会显示不同的端口
- 我试过使用
127.0.0.1
而不是 localhost
- 我已经尝试从重定向 URI 中完全删除端口
- 我已经尝试在 Google 控制台(并等待它们更新以备不时之需)和 JSON 文件
中设置重定向 URI
- 当我创建凭据时,我将其设置为 Web 项目,而不是桌面项目
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 并将新版本包含在您的应用程序中。
无论如何,试试看是否有效。
我知道已经有很多这样的问题,但是 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 以下...
- VS 使用的 URI 永远不会改变。具体来说,端口始终为 44378
- Google 控制台和我的 JSON 文件中的基本 URI 是我调试时浏览器地址栏中的 exact URI,我只是添加了
/authorize
有和没有尾部斜线 - Google window 显示的 URI 的格式为 http://127.0.0.1:59777/authorize/,尽管端口号每次都不同。是不是获取VS使用的端口。添加一个 Google 显示是浪费时间,因为下次我尝试时,它会显示不同的端口
- 我试过使用
127.0.0.1
而不是localhost
- 我已经尝试从重定向 URI 中完全删除端口
- 我已经尝试在 Google 控制台(并等待它们更新以备不时之需)和 JSON 文件 中设置重定向 URI
- 当我创建凭据时,我将其设置为 Web 项目,而不是桌面项目
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 并将新版本包含在您的应用程序中。
无论如何,试试看是否有效。