.NET gmail API 身份验证(无需用户交互)

.NET gmail API Authentication (without user interaction)

我正在尝试使用 C# 控制台应用程序验证 gmail api。 我是 Google api 的 using.net sdk,我用来授权 api 的代码如下:

UserCredential credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets
{
    ClientId = "clientId",
    ClientSecret = "clientsecret"
},
 new[] {  GmailService.Scope.GmailModify },
"user",
 CancellationToken.None, null);

但是上面的代码打开浏览器window请求访问服务的权限,我需要避免这种身份验证activity因为我需要调度项目的“.exe”文件在 Azure

您混淆了授权和身份验证。

授权是一个一次性过程,如果用户未授权您的应用执行您想做的任何事情,您就无法授权。这是一次性的过程。

你在代码中做的是授权。它肯定会打开一个浏览器供用户授权您的应用程序。一旦您授权您的应用程序,那么下次,您需要做的就是进行身份验证。身份验证不需要此手动用户流程。

您所要做的就是在下次需要时使用从 Google 收到的 UserCredential

将从 service 收到的 credential 存储在某处,下次使用它来初始化 Service

var service = new GmailService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential, //your stored credential
    ApplicationName = "App",
});

但是您可能需要刷新 Credential 令牌(每 60 分钟过期一次)。它应该会自动刷新,但您可以在每次需要时通过检查手动刷新。

if (credential.Token.IsExpired)
    var returnBool = await credential.RefreshTokenAsync(cancellationToken);