From 12df8fa505da259b49430c6973c97965480370ef Mon Sep 17 00:00:00 2001 From: Guillaume Blaquiere Date: Mon, 12 Oct 2020 22:30:06 +0200 Subject: [PATCH 1/4] feature: add id_token generation through the service account credentials API --- .../google/auth/oauth2/UserCredentials.java | 75 ++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/oauth2_http/java/com/google/auth/oauth2/UserCredentials.java b/oauth2_http/java/com/google/auth/oauth2/UserCredentials.java index 5010a9ae6..40f06a909 100644 --- a/oauth2_http/java/com/google/auth/oauth2/UserCredentials.java +++ b/oauth2_http/java/com/google/auth/oauth2/UserCredentials.java @@ -40,11 +40,13 @@ import com.google.api.client.http.HttpRequestFactory; import com.google.api.client.http.HttpResponse; import com.google.api.client.http.UrlEncodedContent; +import com.google.api.client.http.json.JsonHttpContent; import com.google.api.client.json.GenericJson; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.JsonObjectParser; import com.google.api.client.util.GenericData; import com.google.api.client.util.Preconditions; +import com.google.auth.http.HttpCredentialsAdapter; import com.google.auth.http.HttpTransportFactory; import com.google.common.base.MoreObjects; import java.io.ByteArrayInputStream; @@ -56,12 +58,21 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.logging.Logger; +import com.google.api.client.http.javanet.NetHttpTransport; + /** OAuth2 Credentials representing a user's identity and consent. */ -public class UserCredentials extends GoogleCredentials implements QuotaProjectIdProvider { +public class UserCredentials extends GoogleCredentials implements QuotaProjectIdProvider, IdTokenProvider { + + private static final Logger LOGGER = Logger.getLogger(HttpCredentialsAdapter.class.getName()); private static final String GRANT_TYPE = "refresh_token"; private static final String PARSE_ERROR_PREFIX = "Error parsing token refresh response. "; + private static final String RESOURCE_MANAGER_API = "https://cloudresourcemanager.googleapis.com/v1/"; + private static final String SERVICE_ACCOUNT_CREDENTIALS_API = "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/"; + private static final String SERVICE_ACCOUNT_CREDENTIAL_ENV_VAR = "SERVICE_ACCOUNT_APPLICATION_CREDENTIALS"; + private static final String DEFAULT_COMPUTE_ENGINE_SERVICE_ACCOUNT_SUFFIX = "-compute@developer.gserviceaccount.com"; private static final long serialVersionUID = -4800758775038679176L; private final String clientId; @@ -70,6 +81,7 @@ public class UserCredentials extends GoogleCredentials implements QuotaProjectId private final URI tokenServerUri; private final String transportFactoryClassName; private final String quotaProjectId; + private String serviceAccountCredentialEmail; private transient HttpTransportFactory transportFactory; @@ -340,6 +352,67 @@ public String getQuotaProjectId() { return quotaProjectId; } + @Override + public IdToken idTokenWithAudience(String targetAudience, List