2015-04-27 111 views
1

我正在使用GAM和Google API PHP客戶端庫與Google for Work進行集成。未經授權訪問電子郵件設置Google API

我使用一個服務帳戶,我已授權在管理控制檯中的客戶端ID訪問以下兩個領域:

  1. https://www.googleapis.com/auth/drive
  2. https://apps-apis.google.com/a/feeds/emailsettings/2.0/

我也啓用Drivepers Console中的Drive API和Admin SDK。沒有電子郵件設置API,我可以看到。

我遵循this page並在測試過程中授予GAM對所有範圍的訪問權限 - 其中包括電子郵件設置範圍。

我可以成功使用GAM和PHP客戶端庫訪問Google Drive API。然而,當我嘗試執行https://developers.google.com/admin-sdk/email-settings/

中詳述的任何電子郵件設置API函數時,我總是會收到403 - 未經授權。我相當有信心在管理控制檯中擁有授權的正確客戶端ID。當我從管理控制檯中刪除範圍https://www.googleapis.com/auth/drive時,它會阻止我從GAM和PHP客戶端庫訪問Google Drive。

有什麼建議嗎?

+0

你能顯示你的代碼嗎? –

+0

我可以顯示我爲GAM執行的命令,因爲它更直接。我已經從輸出中刪除了標識符。 > GAM OAuth信息 OAuth的文件:C:\ TEMP \ BIN \ GAM-64 \ oauth2.txt 客戶端ID: 揭祕:<字符的字符串祕密> 的範圍: – ThoriumReactor

+0

不知道爲什麼你會顯示GAM起作用。如果您希望幫助確定問題,則需要顯示您的代碼。 –

回答

0

GAM不使用服務帳戶進行電子郵件設置API,它爲已安裝的應用程序使用標準OAuth 2.0。請確保您使用超級管理員授權GAM訪問電子郵件設置API。如果沒有,運行

gam oauth revoke 

然後另一個命令,如:

gam all users show imap 

而這個時候請確保您登錄爲超級管理員。

0

傑伊的帖子引導我回答 - 即在訪問電子郵件設置API時,我應該以超級管理員身份登錄。

因此,我創建了一個超級管理員帳戶並使用該帳戶進行了身份驗證。這給了GAM訪問權限。

爲了讓PHP客戶端庫工作,我必須在創建OAuth2令牌時模擬超級管理員帳戶。冒充管理員帳戶的代碼如下:

$credentials = new Google_Auth_AssertionCredentials( $service_account_email, $scopes, $private_key, 'notasecret', // Default P12 password 'http://oauth.net/grant_type/jwt/1.0/bearer', // Default grant type $admin_email );

其中

  • $service_account_email是在開發者控制檯創建的服務帳戶的電子郵件地址 - 而不是超級管理員帳戶。
  • $scopes是您需要訪問的API網址數組
  • $private_key是從開發人員控制檯創建的P12證書的內容。
  • $admin_email是超級管理員帳戶的電子郵件。

希望這可以幫助別人。