我正在使用GAM和Google API PHP客户端库与Google for Work集成。
我正在使用一个服务帐户,并且我已授权管理控制台中的客户端ID访问以下两个作用域:
https://www.googleapis.com/auth/drive
https://apps-apis.google.com/a/feeds/emailsettings/2.0/
我还在开发人员控制台中启用了驱动器API和管理SDK。我看不到电子邮件设置API。
我关注了这个页面,并在测试期间授予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。
有什么建议吗?
GAM不使用服务帐户进行电子邮件设置API,而是使用标准OAuth 2.0来安装应用程序。请确保您使用了超级管理员来授权GAM访问电子邮件设置API。如果没有,运行
gam oauth revoke
然后是另一个命令,比如:
gam all users show imap
这一次,请确保您以超级管理员身份登录。
Jay的帖子让我找到了答案,即在访问电子邮件设置API时,我应该以超级管理员的身份登录。
因此,我创建了一个超级管理员帐户,并使用该帐户验证GAM。这让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 URL的数组$private_key
是从开发人员控制台创建的P12证书的内容$admin_email
是超级管理员帐户的电子邮件
希望这能帮助其他人。