我需要进行 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 尚不清楚是否会枯萎。
目前在后端,我使用 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 尚不清楚是否会枯萎。