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

时间:2016-02-09 12:57:14

标签: c# console-application

我正在尝试使用c#console应用程序来验证gmail api。 我正在使用Google api的.NET sdk,我用来授权api的代码如下:

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

但上面的代码打开浏览器窗口要求访问服务的权限,我需要避免这种身份验证活动,因为我需要在Azure上安排项目的“.exe”文件

1 个答案:

答案 0 :(得分:1)

您在授权和身份验证之间感到困惑。

授权是一次性过程,如果没有用户授权您的应用执行您要执行的任何操作,则无法进行授权。这是一个一次性的过程。

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

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

将您从credential收到的service存储在某处并在下次使用时初始化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);