如何开始使用 OAuth2 for Google Contacts API
How to get started with OAuth2 for Google Contacts API
我正在尝试通过 OAuth 2 身份验证使用 Google 联系人 API。但是一些旧的示例代码现在不适用于此 API.I 找到了一个示例代码,该代码请求访问令牌并作为响应 Google 服务器会给我大约 1 小时限制的访问令牌,并且一个刷新令牌。
但是这段代码有一些问题
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
String APPLICATION_NAME = "PROJECT_NAME";
String SERVICE_ACCOUNT_EMAIL = "NUMERCALS-ALPHANUMERICALS@developer.gserviceaccount.com";
java.io.File p12File = new java.io.File("PROJECT_NAME-NUMERICALS.p12");
GoogleCredential credential =
new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(
Collections.singleton("https://www.google.com/m8/feeds"))
.setServiceAccountPrivateKeyFromP12File(p12File)
.setServiceAccountUser("user@example.com")
.build();
if (!credential.refreshToken()) {
throw new RuntimeException("Failed OAuth to refresh the token");
}
ContactsService service = new ContactsService(APPLICATION_NAME);
service.setOAuth2Credentials(credential);
Query gQuery = new Query(new java.net.URL("https://www.google.com/m8/feeds/groups/user@example.com/full"));
gQuery.setMaxResults(32767);
ContactGroupFeed groupFeed = service.query(gQuery, ContactGroupFeed.class);
for (ContactGroupEntry group : groupFeed.getEntries()) {
我遇到了一些问题
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "invalid_grant"
}
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:269)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
at javaCode.FinalCode.main(FinalCode.java:68)
我是 Google API 的 OAuth2 新手,所以如果我在某处弄错了或提供工作代码,请指导我 snippet.It 会很棒 help.Thanks提前。
在您的示例中,您试图使用服务帐户来模拟用户。
虽然这是可能的,但只能在 Google 工作帐户或 Google 教育帐户下实现。
它不适用于普通的 Gmail 帐户。
如果您的用例属于这种情况,请记住域管理员应授予对您的应用程序的访问权限,还应授予 Domain wide delegation of authority.
但如果您只是想用 API 做一些测试,那么使用普通的 OAuth 会更好。
检查此 tutorial,我知道它适用于云端硬盘,但您可以在其中看到获取授权令牌的基本步骤。搞定后,调用不同的GoogleApis 很相似
我建议检查 OAuth Playground。在那里你可以检查完整的 OAuth 过程,你可以玩 API.
我正在尝试通过 OAuth 2 身份验证使用 Google 联系人 API。但是一些旧的示例代码现在不适用于此 API.I 找到了一个示例代码,该代码请求访问令牌并作为响应 Google 服务器会给我大约 1 小时限制的访问令牌,并且一个刷新令牌。 但是这段代码有一些问题
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
String APPLICATION_NAME = "PROJECT_NAME";
String SERVICE_ACCOUNT_EMAIL = "NUMERCALS-ALPHANUMERICALS@developer.gserviceaccount.com";
java.io.File p12File = new java.io.File("PROJECT_NAME-NUMERICALS.p12");
GoogleCredential credential =
new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(
Collections.singleton("https://www.google.com/m8/feeds"))
.setServiceAccountPrivateKeyFromP12File(p12File)
.setServiceAccountUser("user@example.com")
.build();
if (!credential.refreshToken()) {
throw new RuntimeException("Failed OAuth to refresh the token");
}
ContactsService service = new ContactsService(APPLICATION_NAME);
service.setOAuth2Credentials(credential);
Query gQuery = new Query(new java.net.URL("https://www.google.com/m8/feeds/groups/user@example.com/full"));
gQuery.setMaxResults(32767);
ContactGroupFeed groupFeed = service.query(gQuery, ContactGroupFeed.class);
for (ContactGroupEntry group : groupFeed.getEntries()) {
我遇到了一些问题
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "invalid_grant"
}
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:269)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
at javaCode.FinalCode.main(FinalCode.java:68)
我是 Google API 的 OAuth2 新手,所以如果我在某处弄错了或提供工作代码,请指导我 snippet.It 会很棒 help.Thanks提前。
在您的示例中,您试图使用服务帐户来模拟用户。 虽然这是可能的,但只能在 Google 工作帐户或 Google 教育帐户下实现。 它不适用于普通的 Gmail 帐户。
如果您的用例属于这种情况,请记住域管理员应授予对您的应用程序的访问权限,还应授予 Domain wide delegation of authority.
但如果您只是想用 API 做一些测试,那么使用普通的 OAuth 会更好。
检查此 tutorial,我知道它适用于云端硬盘,但您可以在其中看到获取授权令牌的基本步骤。搞定后,调用不同的GoogleApis 很相似
我建议检查 OAuth Playground。在那里你可以检查完整的 OAuth 过程,你可以玩 API.