我想访问一些Google 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用户通过常规的三足流程进行操作,一旦他们批准,便可以使用此服务帐户流程。但是,这导致了一些奇怪的问题,因此我们禁用了该选项。这可能就是为什么在过去可能存在分歧的原因。
我想访问一些谷歌api服务: < li>GDrive API < li >联系API < li >人员API 我正在使用oauth2模拟服务帐户流(您知道的:Google Oauth v2-服务帐户描述)。为了实现不健全化,您需要在Google应用程序控制台中应用“授权域范围权限”,下载相应的pk12文件,并在Google控制台项目中激活api。 目前我总是得到: 这是我的代码: 我还在stack
问题内容: 上述代码的结果是: 开启。服务帐户客户ID已在GSuite中使用适当的范围进行了授权。 该服务帐户可用于普通凭据。它仅不适用于委托凭证。 我在我们的域中尝试了不同的API(作用域)和不同的用户。 我有一个同事尝试从头开始编写示例,他得到了同样的东西。 问题答案: 我认为您的问题是,在调用Calendar API 之前,您没有对凭据进行授权,但是我在自己的实现中使用了一些区别 使用以下导
我想使用Google服务帐户JWT令牌获取Azure服务主体(SP)的临时凭据。这是从GKE工作负载调用Azure API所必需的,而无需在GKE中存储长期SP凭据。 这样的联盟对GCP来说可能吗- [1]https://cloud.google.com/iam/docs/workload-identity-federation [2] https://docs.aws.amazon.com/IA
我正在尝试在 Go 应用引擎部署上使用具有域范围委派 (DwD) 的服务帐户。 我已按照使用 Google 应用程序默认凭据的步骤将服务帐户与应用引擎配合使用。 我让代码在我的开发计算机上本地运行,但我被困在从我的域中检索实际数据。 我用的是Admin SDK。在“向您的服务帐户授予域范围的权限”一节中,它说我的“服务帐户需要模拟其中一个用户来访问Admin SDK Directory API”。
目标是在G-Suite平台中建立一个服务帐户,应用程序可以使用该帐户执行操作,而无需提示用户进行身份验证。 我们遇到的问题与下面的帖子非常相似,但略有不同。 只要我们遵循“模拟”流程,事情就会正常进行。使用模拟,授权规则遵循被模拟的用户。理想情况下,我们希望相应地作用于服务帐户,而不是模拟用户。当我们这样做时,我们经常收到403。 我们已经尽力按照这里的指示去做了: 我们的Java片段与此类似:
问题内容: 我正在尝试向Drive API发出使用服务帐户模拟用户的请求,但出现异常。 我已经按照https://developers.google.com/identity/protocols/OAuth2ServiceAccount中的说明进行了操作: 在https://console.developers.google.com中,创建一个项目>凭证>服务帐户> P12文件; 启用的Drive