如何开始使用 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.