我正在尝试使用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”文件
答案 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);