我需要进行 oauth2 身份验证才能在 C# 中访问 gmail

I need to do oauth2 authentication to access gmail in C#

目前在后端,我使用 system.net 在 .NET 中的 SMTP 从 gmail 读取邮箱并发送电子邮件,但是 google 现在需要我们进行 OAuth2 身份验证才能继续访问来自电子邮件。但是到目前为止,我已经设法让标准的 Google html 界面看起来可以进行此身份验证,但我需要直接在后端进行此身份验证。

我目前的代码:

[HttpGet]
    [GoogleScopedAuthorize(GmailService.ScopeConstants.GmailCompose)]
    public async Task<ActionResult> userProfile([FromServices] IGoogleAuthProvider auth)
    {
        try
        {
            var cred = await auth.GetCredentialAsync();
            Console.WriteLine("Auntenticado");
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }
        return Ok();
}

默认身份验证屏幕:

我需要它直接在后端进行身份验证。

首先,从代码中可以看出,您正在尝试使用 Gmail api。这不是 smtp 服务器。

你也收录了

[GoogleScopedAuthorize(GmailService.ScopeConstants.GmailCompose)]

这让我相信您正在关注 asp .net 核心 configure-your-application-to-use-google.apis.auth.aspnetcore3 示例。

因此,这就是它的设计目的。它将在用户计算机上打开同意 window 并请求他们访问其 gmail 帐户的权限。

服务器端。

如果您想访问用户的 gmail 帐户服务器端,那么您需要像您已经在做的那样授权他们,然后存储返回的刷新令牌。然后您将能够从您的服务器端应用程序使用它来访问用户的 gmail 帐户,而无需他们在场。

这里的关键是您需要征得用户同意才能访问他们的数据。

申请电子邮件帐户

如果你想做的是访问一个你控制的帐户,而这不是你系统用户的帐户,那么事情对你来说会更困难。

除非这是一个 google 工作区域电子邮件地址,否则您无法获得用户服务帐户授权。如果它是工作区域帐户,那么我建议您调查一下。

如果是普通的标准 google gmail 帐户,那么您需要对用户进行一次授权。将刷新令牌存储在系统中的某个位置,然后根据需要使用它来请求访问令牌。您可以为此使用已安装的应用程序示例。如果您的刷新令牌出现故障,您将需要观看它,您将失去访问权限。此解决方案不是最佳解决方案,但它是唯一可用的选项。

或者您可以使用您现在拥有的代码尝试应用密码。 Google 尚不清楚是否会枯萎。