2015-04-27 57 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是超级管理员帐户的电子邮件。

希望这可以帮助别人。