.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"文件
您在授权和身份验证之间混淆了。
授权是一次性过程,未经用户授权你的应用执行任何你想要执行的操作,则无法授权。这是一个一次性的过程。
你在代码中做的是授权。它肯定会打开一个浏览器供用户授权您的应用程序。授权应用后,下次只需进行身份验证即可。身份验证不需要此手动用户过程。
您所要做的就是使用下次需要时从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);