.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);
我正在尝试使用 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);