2013-12-10 35 views
2

我正在嘗試使用Google服務帳戶獲取其他用戶的聯繫人。我甚至將用戶憑據設置爲我想要獲取聯繫人的帳戶的用戶名和密碼。然而,我不斷收到一個錯誤 - 線程「主」com.google.gdata.util.ServiceForbiddenException異常:不能請求屬於另一個用戶的聯繫人谷歌聯繫人 - 使用服務帳戶獲取其他用戶的聯繫人

最初我使用管理員帳戶來獲取其他用戶的聯繫人我不斷收到禁止的錯誤。我被告知服務帳戶將在這種情況下工作。

任何人都可以請幫忙嗎?是否真的有可能通過服務帳戶或其他方法獲得另一個帳戶的聯繫人?如果是的話,任何想法,爲什麼我必須得到這個錯誤?

回答

0

如果您的服務帳戶客戶端在域級別列出白名單,則只能使用服務帳戶訪問其他人的聯繫人。換句話說 - 您不能在沒有管理員權限的情況下任意跨域訪問其他人的聯繫人。

最簡單的選擇是使用OAuth 2 Web服務器或客戶端流 - 每個用戶必須授權您的數據訪問。

+1

感謝您的回覆。 請您詳細說明'在域級別列出的白色'嗎?我該怎麼做呢? 我們正在嘗試編寫一個提供Google Apps用戶和組的連接器。用戶密碼不會保存在我們的數據庫中。我們試圖通過使用OAuth2協議來獲取使用管理員權限的其他用戶的聯繫人。但是,它給出了一個403 Forbidden錯誤。對於服務帳戶,我嘗試過設置AccountCredentials。這也沒有用。我可能缺少的任何其他設置? 請幫忙。 – Sayali

1

如果你想使用服務帳戶來訪問用戶的聯繫人,你需要做三件事情(見https://developers.google.com/accounts/docs/OAuth2ServiceAccount):

  1. Google Developers Console創建服務帳戶。
  2. 使用域名Admin console將服務帳戶的域範圍授權委託給該服務帳戶。
  3. (需要訪問聯繫人:) 通過使用GoogleCredential工廠的setServiceAccountUser方法指定用戶帳戶的電子郵件地址來模擬用戶

例如:

GoogleCredential credential = new GoogleCredential.Builder() 
    .setTransport(httpTransport) 
    .setJsonFactory(JSON_FACTORY) 
    .setServiceAccountId(emailAddress) 
    .setServiceAccountPrivateKeyFromP12File(new File("MyProject.p12")) 
    .setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN)) 
    .setServiceAccountUser("[email protected]") 
    .build(); 

錯誤消息Cannot request contacts belonging to another user建議您忘了最後一步。