我需要创建一个Windows服务,每天将联系人从数据库导出到我的Google联系人帐户。
由于该应用程序是服务并且帐户是我的,因此我不想/需要使用浏览器身份验证,但是我设法设置了一个服务帐户。
我正在测试它,但现在,当我请求访问令牌时,我收到"请求的客户端未授权"错误消息
首先,配置:我有我的"目标"帐户,我希望导入联系人的帐户,这是 info@mydomain.com
在开发人员控制台中,以 info@mydomain.com 身份登录,我创建了新凭据 ->服务帐户密钥作为 contactimporter@mydomain-123456.iam.gserviceaccount.com;我下载了 .p12 密钥并启用了全网域委派
然后,我进入了Google Apps帐户的管理面板,然后安全性 -> 显示更多 -> 高级设置 -> 管理 API 客户端访问
我输入了服务客户端 ID 和"https://www.google.com/m8/feeds/"作为范围
接口范围
最后,代码:
var _uName = "info@mydomain.com";
var _pWord = "password!"; //info@mydomain.com's password
var _aSrvE = "contactimporter@mydomain-123456.iam.gserviceaccount.com";
var certificate = new X509Certificate2(@"C:TestGoogleContactsExporter-123456789.p12", "notasecret", X509KeyStorageFlags.Exportable);
var credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(_aSrvE)
{
Scopes = new string[] { "https://www.google.com/m8/feeds"},
User = _uName
}.FromCertificate(certificate));
var task = credential.RequestAccessTokenAsync(new CancellationToken());
task.Wait();
task.Wait()
我得到这个异常:
System.TypeInitializationException: L'inizializzatore di tipo di 'LibraryTest.GoogleContactsHelper' ha generato un'eccezione.---> System.AggregateException: Si sono verificati uno o più errori.---> Google.Apis.Auth.OAuth2.Responses.TokenResponseException: 错误:"access_denied", 描述:"请求的客户端未授权。", uri:"> Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 任务(在 Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task 任务(在 Google.Apis.Auth.OAuth2.ServiceAccountCredential.d__19.移动下一个((
我想我已经做得很好,我不知道要检查什么:任何帮助将不胜感激。
您使用旧的Google API授权方法。我不知道这次是否支持。尝试使用 OAuth 2.0 授权 Google OAuth 2.0
希望这有所帮助。
安德烈亚斯