【发布时间】: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 帐户),我会收到同样的错误。
有人有什么想法吗?据我所知,我已经尝试了其他答案中提到的所有内容,但仍然出现此错误。
【问题讨论】:
标签: oauth-2.0 google-api google-drive-api google-oauth google-api-dotnet-client