2017-05-29 5 views
0

Ich versuche, eine Verbindung zu den Google Kontakte API zu meinen Kontakten/Personen, die in Google gespeichert sind, aber es wirft eine TokenResponseException: 401 Nicht autorisierte. Ich bin irgendwie neu in Google Oauth2.0. Ich habe die Dienstkontendatei bereits nach Bedarf in mein Projektstammverzeichnis heruntergeladen.TokenResponseException: 401 Nicht autorisiert beim Zugriff auf Google Kontakte Api

Unten ist der Code:

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; 
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; 
import com.google.api.client.http.HttpTransport; 
import com.google.api.client.json.jackson2.JacksonFactory; 
import com.google.gdata.client.contacts.ContactsService; 
import java.io.IOException; 
import java.security.GeneralSecurityException; 
import java.util.Arrays; 

public class Connector { 
private static ContactsService contactService = null; 
    private static HttpTransport httpTransport; 

    private static final String APPLICATION_NAME = "example"; 
    private static final String SERVICE_ACCOUNT_EMAIL = "[email protected]"; 
    private static final java.util.List<String> SCOPE = Arrays.asList("https://www.google.com/m8/feeds/"); 

    private Connector() { 
     // explicit private no-args constructor 
    } 

    public static void main(String[] args) { 
     System.out.println(getInstance()); 
    } 

    public static ContactsService getInstance() { 
     if (contactService == null) { 
      try { 
       contactService = connect(); 
      } catch (GeneralSecurityException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     return contactService; 
    } 

    private static ContactsService connect() throws GeneralSecurityException, IOException { 
     httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 

     java.io.File p12File = new java.io.File("example-e8135faedf4e.p12"); 

     // @formatter:off 
     GoogleCredential credential = new GoogleCredential.Builder() 
       .setTransport(httpTransport) 
       .setJsonFactory(JacksonFactory.getDefaultInstance()) 
       .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
       .setServiceAccountScopes(SCOPE) 
       .setServiceAccountPrivateKeyFromP12File(p12File) 
       .setServiceAccountUser("[email protected]") 
       .build(); 
     // @formatter:on 

     if (!credential.refreshToken()) { 
      throw new RuntimeException("Failed OAuth to refresh the token"); 
     } 

     ContactsService myService = new ContactsService(APPLICATION_NAME); 
     myService.setOAuth2Credentials(credential); 

     return myService; 
    } 
} 

jedoch die folgende Ausnahme ausgelöst:

com.google.api.client.auth.oauth2.TokenResponseException: 401 Unauthorized
null
unter com.google.api.client.auth.oauth2.TokenResponseException.from (TokenResponseException.java:105) unter com.google.api.client.auth.oauth2.TokenRequest.executeU nparsed (TokenRequest.java:287) bei com.google.api.client.auth.oauth2.TokenRequest.execute (TokenRequest.java:307) bei com.google.api.client.googleapis.auth.oauth2. GoogleCredential.executeRefreshToken (GoogleCredential.java:384) bei com.google.api.client.auth.oauth2.Credential.refreshToken (Credential.java:489) bei Connector.connect (Connector.java:58) bei Steckverbinder .getInstance (Connector.java:31) bei Connector.main (Connector.java:25) BUILD erfolgreich (Gesamtzeit: 9 Sekunden )

Antwort

0

von diesemBasierend, TokenResponseException kann durch viele Dinge wie ungültige Client-ID, Client-Secret oder Bereiche und durch Überfrachtung von Token verursacht werden. Es wird auch here angegeben, dass eine andere mögliche Quelle für eine "401 Unauthorized" Ausnahme die credential.refreshToken() weg verlässt. Der Aufruf ist notwendig, um den Zugangscode in die Referenz zu schreiben.

Weitere Referenz, die auch helfen könnten: 401 response when athenticating via Service Account and OAuth2 to GoogleDrive

+1

ich so spät bin zu sehen, aber sie für die Hilfe danken. Ich war in der Lage, das Problem zu beheben, lassen Sie mich den endgültigen Code in Kürze –

+0

@MichaelGatumaSelvatico: Was war Ihre Lösung. –

Verwandte Themen