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

本文关键字:用户 交互 Gmail API 身份验证 NET | 更新日期: 2023-09-27 18:34:01

我正在尝试使用 c# 控制台应用程序对 gmail api 进行身份验证。我 using.net 谷歌 api 的 sdk,我用来授权 api 的代码如下:

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

但是上面的代码打开一个浏览器窗口以请求访问服务的权限,我需要避免此身份验证活动,因为我需要在Azure上计划项目的".exe"文件

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

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

授权

是一次性过程,未经用户授权你的应用执行任何你想要执行的操作,则无法授权。这是一个一次性的过程。

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

您所要做的就是使用下次需要时从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);