Google Apps电子邮件设置API和带有服务帐户的oauth2.0凭据

时间:2014-03-23 11:26:56

标签: java google-app-engine oauth google-api google-apps

我尝试在java中使用Oauth 2.0 Google Credential和服务帐户来编辑用户签名但我收到了错误:

com.google.gdata.util.ServiceForbiddenException: OK
<HTML><HEAD><TITLE>You are not authorized to access this API.</TITLE></HEAD><BODY BGCOLOR="#FFFFFF" TEXT="#000000"><H1>You are not authorized to access this API.</H1><H2>Error 403</H2></BODY></HTML>

我创建了一段代码,以便在此模式下将GoogleCredential对象与服务帐户电子邮件一起使用:

  HttpTransport httpTransport = new NetHttpTransport();
  JacksonFactory jsonFactory = new JacksonFactory();
  Collection<String> clist= new ArrayList<String>(
            Arrays.asList("https://apps-apis.google.com/a/feeds/emailsettings/2.0/",                    "https://www.googleapis.com/auth/admin.directory.user" 
                    ));
  GoogleCredential gc=null;
try {
    gc = new GoogleCredential.Builder().setTransport(httpTransport)
      .setJsonFactory(jsonFactory)
      .setServiceAccountId(c.getServiceAccountEmail())
      .setServiceAccountScopes(clist)
      .setServiceAccountPrivateKeyFromP12File(new java.io.File(c.getPkcs12FileName()))
      .build();
} catch (GeneralSecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
  this.setOAuth2Credentials(gc);

我已在服务帐户的Google Apps for Business面板中插入了范围,并且我在控制台项目中启用了Admin sdk API。

为什么我收到我没有授权的? 我可以在此代码中使用Oauth 2.0代替管理员的unsername和密码吗?

https://developers.google.com/admin-sdk/email-settings/#manage_signature_settings

为什么没有正式的gmail设置服务不是用于样本的appforyoudomain服务?Oauth 2.0支持服务帐户?

谢谢

1 个答案:

答案 0 :(得分:1)

您已授予服务帐户权限以代表您的用户执行操作。现在,服务帐户需要充当域中的用户,并具有为所有用户执行签名更新的权限,换句话说,它需要充当超级管理员。尝试添加:

.setServiceAccountUser(USEREMAIL)

其中userEmail是您的Google Apps实例中超级管理员的电子邮件地址。一个good walkthrough for this is in the Admin SDK documentation