google oauth2 sich als Dienstkonto mit dem Nutzer @ gmail.com @ ausgeb

Ich wollte auf einige Google API-Dienste zugreifen:

GDrive APIContact APIPeople API

Und ich kämpfe mit dem unechten Dienstkontofluss von oauth2 (Sie wissen, dass einer:Google Oauth v2 - Beschreibung des Dienstkontos. Zum Identitätswechsel müssen Sie die "Domainweite Berechtigung delegieren" in der Google Apps-Konsole anwenden, die entsprechende pk12-Datei herunterladen und die API in einem Google Console-Projekt aktivieren.

m Moment bekomme ich immer:

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)

Hier ist mein Code:

        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("[email protected]")
                .setServiceAccountPrivateKeyFromP12File(new File("somep12key.p12"))
                .setServiceAccountScopes(scopes)
                .setServiceAccountUser("[email protected]")
                .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);

Ich habe auch intensiv nach Stackoverflow gesucht (kann nicht alle Referenzen auflisten und die Antworten und Lösungen überprüfen). Aber eine Frage wurde nie klar beantwortet - weder in googles documentaiont noch auf allen stackoverflow posts:

Ist es wirklich möglich, einen Serviceaccount mit einem normalen Benutzer ([email protected]) zu verkörpern (ich meine einen normalen Google Mail-Account ohne Zugriff auf die erwähnte Administrationskonsole im Kapitel "Domainweite Berechtigung an den Serviceaccount delegieren" und ohne eine eigene Domain)?

Manche sagen ja, manche sagen nein. Also, was ist die absolute Wahrheit?

Soweit ich beim Lesen der Google Docs verstehe, gilt Folgendes: Das Dienstkonto kann nur dann für Benutzer verwendet werden, wenn Sie für eine eigene Domain verantwortlich sind und ein Google Work-Konto mit Ihrer eigenen Domain registriert sein muss. Dann können Sie auf die Administratorkonsole zugreifen und Zugriff auf das Dienstkonto gewähren.

ielen Dank für Ihre Geduld und Ihre Zeit, um zu antworte

it freundlichen Grüßen Ma

Antworten auf die Frage(2)

Ihre Antwort auf die Frage