google oauth2使用user@gmail.com模拟服务帐户

我想访问一些Google API服务:

  • GDrive API
  • 联系API
  • 人物API

而且,我正在努力模拟oauth2模拟服务帐户流程(您知道一个:Google

Oauth

v2-

服务帐户说明。要进行模拟,您需要在google应用控制台中应用“委派域范围的授权”,请下载相应的pk12文件并在Google控制台项目中激活api。

此刻我总是得到:

com.google.api.client.auth.oauth2.TokenResponseException: 401 Unauthorized

at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)

at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)

at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)

at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:384)

at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)

at oauthsample.GDriveAPI.<init>(GDriveAPI.java:50)

at oauthsample.GDriveAPI.main(GDriveAPI.java:85)

这是我的代码:

        HttpTransport httpTransport = new NetHttpTransport();

JacksonFactory jsonFactory = new JacksonFactory();

Set<String> scopes = new HashSet<String>();

scopes.add("https://www.google.com/m8/feeds");

GoogleCredential credential = new GoogleCredential.Builder()

.setTransport(httpTransport)

.setJsonFactory(JSON_FACTORY)

.setServiceAccountId("myserviceuser@xxxxxx.iam.account.com")

.setServiceAccountPrivateKeyFromP12File(new File("somep12key.p12"))

.setServiceAccountScopes(scopes)

.setServiceAccountUser("my_user_name@gmail.com")

.build();

credential.refreshToken();

ContactsService service = new ContactsService("MYAPP");

service.getRequestFactory().setHeader("User-Agent", "MYAPP");

service.setHeader("GData-Version", "3.0");

service.setOAuth2Credentials(credential);

URL feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full");

ContactFeed resultFeed = service.getFeed(feedUrl, ContactFeed.class);

我还通过stackoverflow进行了大量搜索(无法列出所有引用并检查响应和解决方案)。但是从来没有一个人清楚地回答过一个问题-在Google

documentaiont或所有stackoverflow帖子中都没有:

有人说是,有人说不。那么什么是绝对真理?

据我在阅读google文档时所了解的:仅当您负责自己的域并且您需要注册自己的域的Google工作帐户时,该服务帐户才能模拟用户。然后,您可以访问管理控制台,并可以授予对服务帐户的访问权限。

多谢您的耐心配合和宝贵时间。

最好的问候马特

回答:

简短的答案是“否”,无法对@

gmail.com帐户进行模拟服务帐户。关键原因是,尽管服务帐户OAuth流程不涉及授权屏幕,但最终还是必须有人说“我授权此应用程序来模拟该用户”。

如果是Google Apps域,则该人是域管理员,他有权为该域中的所有用户批准应用。对于@

gmail.com帐户,没有其他机构可以代表您批准该帐户。而且,无论如何,如果您必须要询问用户授权,那么使用常规的三足式OAuth流来提示用户进行授权,获取刷新令牌等都是有意义的。

现在有一段时间,您可以使用一个技巧,让@

gmail.com用户通过常规的三足流程进行操作,一旦他们批准,便可以使用此服务帐户流程。但是,这导致了一些奇怪的问题,因此我们禁用了该选项。这可能就是为什么在过去可能存在分歧的原因。

以上是 google oauth2使用user@gmail.com模拟服务帐户 的全部内容, 来源链接: utcz.com/qa/424110.html

回到顶部