Google oauth2 олицетворяет учетную запись службы с user@gmail.com

Я хотел получить доступ к некоторым сервисам Google API:

GDrive APIСвязаться APIЛюди API

И я борюсь с потоком учетных записей службы oauth2 (вы знаете, что один:Google Oauth v2 - описание учетной записи сервиса, Для олицетворения вам нужно применить «Делегирование полномочий домена» в консоли приложений Google, загрузить соответствующий файл pk12 и активировать API в проекте консоли Google.

На данный момент я всегда получаю:

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 (не могу перечислить все ссылки и проверил ответы и решения). Но на один вопрос так и не был дан четкий ответ - ни в googles documentmentaiont, ни во всех сообщениях stackoverflow:

Реально ли выдать себя за учетную запись службы обычным пользователем user@gmail.com (я имею в виду обычную учетную запись gmail, не имеющую доступа к упомянутой консоли администратора в главе «Передача полномочий домена в учетную запись службы» и не имеющая собственный домен)?

Некоторые говорят да, некоторые говорят нет. Так в чем же абсолютная правда?

Насколько я понимаю, читая документы Google: учетная запись службы может выдавать себя за пользователей только в том случае, если вы отвечаете за собственный домен и вам нужна рабочая учетная запись Google с зарегистрированным доменом. После этого вы сможете получить доступ к консоли администратора и предоставить доступ к учетной записи службы.

Спасибо за ваше терпение и за ваше время, чтобы ответить.

С наилучшими пожеланиями Мэтт