【发布时间】:2015-12-27 05:12:30
【问题描述】:
我正在尝试执行服务器端 OAuth,以便可以使用我域中的特定用户帐户通过我的应用程序发送电子邮件(因此使用 GMail API)。
我的是一个纯粹的服务器端应用程序,我无法通过 UI 执行“用户同意”。
我在 Google App Engine 中创建了一个项目并获得了服务帐户凭据(P12 密钥)。
我的代码是这样的 -
new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(googleEmailerServiceAccountId)
.setServiceAccountPrivateKeyFromP12File(new File(googleEmailerServiceAccountPrivateKeyLocation)).setServiceAccountScopes(Collections.singleton(GmailScopes.GMAIL_COMPOSE))
.setServiceAccountUser("xxx@xxx.com")
.build()
我已根据https://developers.google.com/identity/protocols/OAuth2ServiceAccount,通过管理控制台委派了对应用程序的域范围访问(针对 GMAIL COMPOSE 范围)。
当我尝试从我的应用发送电子邮件时,我仍然收到未经授权的 401。
由于没有明确的 Gmail API 文档说明它允许域范围的委派,我猜 Gmail 不允许这样做。
有没有办法以编程方式实现这一目标?
任何想法将不胜感激。 谢谢!
【问题讨论】:
-
除非您可以授予其他用户访问该 gmail 帐户的权限,否则我认为您不会获得使用 Gmail 的服务帐户。
-
感谢@DalmTo 的回复。但是link 此处的此链接表示两个用户都将列在委派用户发送的电子邮件中。这对我不起作用。
-
你能做的就是验证一次。保存刷新令牌,然后使用它来访问它。服务帐户必须经过预授权我真的认为它不适用于 Gmail,但我没有域帐户,因此无法自己测试。
-
即使验证一次,我也必须有一个我没有的网络应用程序。我试图重新使用另一个客户端的刷新令牌,但这显然不起作用。
-
创建一个虚拟应用程序来创建一个刷新令牌。只要您使用相同的客户端 ID,它就可以工作。 (我以前做过)
标签: gmail-api service-accounts