google oauth2 representa a conta de serviço com [email protected]

Eu queria acessar alguns serviços da API do Google:

API do GDriveAPI de contatoAPI de pessoas

E estou lutando com o fluxo de conta de serviço oauth2 (você conhece esse:Google Oauth v2 - descrição da conta de serviço. Para personificação, você deve aplicar a "Delegação de autoridade em todo o domínio" no console do Google Apps, baixar o arquivo pk12 com nova codificação e ativar a API em um projeto do Google Console.

No momento eu sempre recebo:

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)

Aqui está o meu código:

        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);

Também pesquisei bastante pelo stackoverflow (não consigo listar todas as referências e verifiquei as respostas e soluções). Mas uma pergunta nunca foi respondida claramente - nem no documento do Google nem em todas as postagens de stackoverflow:

É realmente possível representar uma conta de serviço com um usuário normal [email protected] (refiro-me a uma conta normal do Gmail sem acesso ao console administrativo mencionado no capítulo "Delegando autoridade de todo o domínio à conta de serviço" e sem ter um próprio domínio)?

Alguns dizem que sim, outros dizem que não. Então, qual é a verdade absoluta?

Pelo que entendi ao ler os documentos do google: A conta de serviço só pode se passar por usuários quando você é responsável por um domínio próprio e você precisa ter uma conta do google work com seu próprio domínio registrado. Então, você poderá acessar o console do administrador e conceder acesso à conta de serviço.

Agradecemos sua paciência e seu tempo para responder.

Atenciosamente Matt

questionAnswers(1)

yourAnswerToTheQuestion