title: Google Service Account domain wide delegation set service account using JSON key file instead of p12
body: <p>I'm able to use a Google Service account with domain wide delegation using the .p12 key file just fine. </p>
  
  <p>I'd like to use the JSON key file instead of the p12 file, but I can't figure out how to set the service account id when using the JSON key. </p>
  
  <p>How do you set the user to impersonate using the JSON key file?</p>
  
  <p><strong>Works fine:</strong></p>
  
  <pre><code>File p12File = new File(...);
  GoogleCredential.Builder b = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
  .setJsonFactory(JSON_FACTORY).setServiceAccountId(properties.getServiceAccountId())
                    .setServiceAccountPrivateKey(SecurityUtils.loadPrivateKeyFromKeyStore(SecurityUtils.getPkcs12KeyStore(),
                        new FileInputStream(p12File), "notasecret",
                        "privatekey", "notasecret"))
                    .setServiceAccountScopes(GOOGLE_SCOPE_LIST);
                if (properties.getServiceAccountEmail() != null) {
                  b = b.setServiceAccountUser(properties.getServiceAccountEmail());
                }
                credential = b.build();
  </code></pre>
  
  <p><strong>Does not work:</strong></p>
  
  <pre><code>String jsonKeyContents = "{\n" +
              "  \"type\": \"service_account\",\n" +
              "  \"project_id\": \"sxxxxxxx0\",\n" +
              "  \"private_key_id\": \"csxxxxxxxxxxxxxxxx\",\n" +
              "  \"private_key\": \"-----BEGIN PRIVATE " +
              "KEY-----\\nMIIxxxxxxxxxxsTbwzsbw" +
              "==\\n-----END PRIVATE KEY-----\\n\",\n" +
              "  \"client_email\": \"xxxxx@xxxxxx-123456.iam.gserviceaccount.com\",\n" +
              "  \"client_id\": \"1111111111111111111\",\n" +
              "  \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n" +
              "  \"token_uri\": \"https://accounts.google.com/o/oauth2/token\",\n" +
              "  \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n" +
              "  \"client_x509_cert_url\": \"https://www.googleapis" +
              ".com/robot/v1/metadata/x509/xxxxx%40xxxxxx-xxxxx-123456.iam.gserviceaccount.com\"\n" +
              "}";
  try (InputStream privateKeyInputStream = new ByteArrayInputStream(jsonKeyContents
            .getBytes("UTF-8") )) {
          credential = GoogleCredential.fromStream(privateKeyInputStream).createScoped(GOOGLE_SCOPE_LIST);
  }
  </code></pre>
  
  <p>When using the JSON key to use Directory API to list all Enterprise users, I get an error message:</p>
  
  <pre><code>Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found
  {
    "code" : 404,
    "errors" : [ {
      "domain" : "global",
      "message" : "Domain not found.",
      "reason" : "notFound"
    } ],
    "message" : "Domain not found."
  }
  at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146)
  at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
  at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
  at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1065)
  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
  ...
  </code></pre>
  
  <p>All the issues seem to relate to the fact that there is no place to put the service account email.</p>
  
  <p>What am I missing here? Is there someone with a working example they can share some code for?</p>