使用 \"https://accounts.google.com/o/oauth2/v2/auth?access_type=offline 启动浏览器失败

Failed to launch browser with \"https://accounts.google.com/o/oauth2/v2/auth?access_type=offline

我正在使用此代码通过我的网络服务发送电子邮件

string[] Scopes = { GmailService.Scope.GmailSend };
string ApplicationName = "SendMail";
UserCredential credential;
            //read credentials file
            using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
            {
                string credPath = "token.json";
                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    Scopes,
                    "user",
                    CancellationToken.None
                    ).Result;

            }

            string plainText = $"To: user@domain.io\r\n" +
                               $"Subject: subject\r\n" +
                               "Content-Type: text/html; charset=utf-8\r\n\r\n" +
                               $"<h1>test email</h1>";

            //call gmail service
            var service = new GmailService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });

            var newMsg = new Google.Apis.Gmail.v1.Data.Message();
            newMsg.Raw = Base64UrlEncode(plainText.ToString());
            service.Users.Messages.Send(newMsg, "me").Execute();

它在部署后在本地完全正常工作但抛出此错误 Failed to launch browser with \"https://accounts.google.com/o/oauth2/v2/auth?access_type=offline 即使我在重定向 uri 部分和客户端的

中添加了服务器 url

注意事项

您正在 Web 服务器中使用安装的应用程序授权流程。这不是为了工作。您将不得不在 Web 托管应用程序中以不同方式处理授权。

在代码中,这转化为使用 GoogleAuthorizationCodeFlow 而不是 GoogleWebAuthorizationBroker 构建客户端实例来验证和授权 Google API。

已安装的应用程序与 Web 应用程序

部署 Web 应用程序时,您必须首先获取正确类型的 ClientID。

Here 关于如何验证 Web 服务器应用程序的详尽指南。

尽管这在每个客户端库中都非常相似,here 是一个关于如何在 .NET Framework 中实现服务器端身份验证流程的示例。

参考资料

OAuth2 For Web Server Applications

OAuth2 Google Client Libraries .NET