2016-02-15 133 views
0

我需要製作一個Windows服務,每天將數據庫中的聯繫人導出到我的Google聯繫人帳戶。谷歌聯繫人API:請求的客戶端未授權

由於應用程序是一項服務,該帳戶是我的,我不想/不需要使用瀏覽器身份驗證,但我設法設置了一個服務帳戶。

我測試它,但是,現在,當我請求訪問令牌我得到的「請求的客戶端未授權」的錯誤消息

首先,配置:我有我的「目標」帳戶,該一個我想要導入聯繫人,即[email protected]

在Developer Console中,記錄爲[email protected],我創建了新憑據 - >服務帳戶密鑰爲contactimporter @ mydomain-123456。 iam.gserviceaccount.com;我下載了.p12密鑰並啓用了域名範圍代碼

然後我進入Google Apps帳戶的管理面板,然後點擊安全 - >顯示更多 - >高級設置 - >管理API客戶端訪問

我進入服務accont客戶端ID和 「https://www.google.com/m8/feeds/」 的範圍

API Scope

最後,代碼:

var _uName = "[email protected]"; 
var _pWord = "password!";   //[email protected]'s password 
var _aSrvE = "[email protected]"; 

var certificate = new X509Certificate2(@"C:\Test\GoogleContactsExporter-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: Error:"access_denied", Description:"Requested client not authorized.", Uri:"" in Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) in Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task) in Google.Apis.Auth.OAuth2.ServiceAccountCredential.d__19.MoveNext()

我想我所做的一切就OK了,我不知道是什麼,檢查更多的:任何幫助,將不勝感激。

+0

你有沒有試過閱讀這張SO票? http://stackoverflow.com/questions/23888276/requested-client-not-authorized –

+0

謝謝,我讀過它,但不幸的是,業主沒有找到一個「真正的」解決方案,他只是設法重構代碼一個我沒有的結構:就我所知,PlusService沒有與聯繫人API等價的功能 –

回答

-1

您使用舊的google api授權方法。我不知道在這個時候是否支持。 嘗試使用OAuth 2.0授權Google OAuth 2.0

希望這會有所幫助。

安德烈亞斯

相關問題