【发布时间】:2021-01-09 04:12:55
【问题描述】:
我正在阅读/发送带有 API 请求的 c# 中的 gmail 电子邮件。我有一个访问令牌,但它在一小时后过期,不再执行进一步的操作。请问有人可以帮助我了解如何获取新的有效访问令牌的程序吗?
提前谢谢你!
编辑:
这是我获得授权的代码:
public static GmailService AuthenticateOauthGmail(string clientSecretJson, string userName)
{
try
{
if (string.IsNullOrEmpty(userName))
throw new ArgumentNullException("userName");
if (string.IsNullOrEmpty(clientSecretJson))
throw new ArgumentNullException("clientSecretJson");
if (!File.Exists(clientSecretJson))
throw new Exception("clientSecretJson file does not exist.");
// These are the scopes of permissions you need. It is best to request only what you need and not all of them
string[] scopes = new string[] { "https://mail.google.com"};
//UserCredential credential;
using (var stream = new FileStream(clientSecretJson, FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/", System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);
// Requesting Authentication or loading previously stored authentication for userName
Variables.Credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets,
scopes,
userName,
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
var newCredentials = GoogleWebAuthorizationBroker.ReauthorizeAsync(Variables.Credential, CancellationToken.None);
}
// Create Drive API service.
return new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = Variables.Credential,
ApplicationName = "Gmail Oauth2 Authentication Sample"
});
}
catch (Exception ex)
{
Console.WriteLine("Create Oauth2 account GmailService failed" + ex.Message);
throw new Exception("CreateServiceAccountGmailFailed", ex);
}
}
这就是我的 Credentials.Token 的样子 credentials.Token
由于访问令牌已过期,在尝试阅读邮件时,我收到错误消息:
{
"error": {
"code": 401,
"message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"errors": [
{
"message": "Invalid Credentials",
"domain": "global",
"reason": "authError",
"location": "Authorization",
"locationType": "header"
}
],
"status": "UNAUTHENTICATED"
}
}
我有 nuget 包 Google.Apis.Auth。我应该使用另一个吗?
【问题讨论】:
-
请编辑您的问题并包含您的代码,我会看看是否可以提供帮助。您是否使用 Google .net 客户端库,如果是,它应该会为您处理所有这些。
-
嗨@DaImTo,我已经编辑了我的帖子。请你再过一遍好吗?谢谢你:)
标签: c# api email request gmail