Skip to content

Commit c38282b

Browse files
committed
add slf4j and other test dep. add logging utils. add logging to req/resp to auth endpoints.
1 parent 9a7c2e0 commit c38282b

File tree

13 files changed

+970
-5
lines changed

13 files changed

+970
-5
lines changed

oauth2_http/java/com/google/auth/oauth2/ComputeEngineCredentials.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ public class ComputeEngineCredentials extends GoogleCredentials
9292
static final Duration COMPUTE_REFRESH_MARGIN = Duration.ofMinutes(3).plusSeconds(45);
9393

9494
private static final Logger LOGGER = Logger.getLogger(ComputeEngineCredentials.class.getName());
95+
private static final org.slf4j.Logger SLF4JLOGGER =
96+
LoggingUtils.getLogger(ComputeEngineCredentials.class);
9597

9698
static final String DEFAULT_METADATA_SERVER_URL = "http://metadata.google.internal";
9799

@@ -296,11 +298,14 @@ public AccessToken refreshAccessToken() throws IOException {
296298
throw new IOException("Empty content from metadata token server request.");
297299
}
298300
GenericData responseData = response.parseAs(GenericData.class);
301+
LoggingUtils.logGenericData(
302+
responseData, SLF4JLOGGER, "Auth response from refresh access token payload.");
299303
String accessToken =
300304
OAuth2Utils.validateString(responseData, "access_token", PARSE_ERROR_PREFIX);
301305
int expiresInSeconds =
302306
OAuth2Utils.validateInt32(responseData, "expires_in", PARSE_ERROR_PREFIX);
303307
long expiresAtMilliseconds = clock.currentTimeMillis() + expiresInSeconds * 1000;
308+
304309
return new AccessToken(accessToken, new Date(expiresAtMilliseconds));
305310
}
306311

@@ -361,7 +366,9 @@ private HttpResponse getMetadataResponse(
361366
request.setThrowExceptionOnExecuteError(false);
362367
HttpResponse response;
363368
try {
369+
LoggingUtils.logRequest(request, SLF4JLOGGER, "auth get metadata sending request.");
364370
response = request.execute();
371+
LoggingUtils.logResponse(response, SLF4JLOGGER, "auth get metadata received response.");
365372
} catch (UnknownHostException exception) {
366373
throw new IOException(
367374
"ComputeEngineCredentials cannot find the metadata server. This is"
@@ -461,7 +468,10 @@ private static boolean pingComputeEngineMetadata(
461468
request,
462469
MetricsUtils.getGoogleCredentialsMetricsHeader(
463470
RequestType.METADATA_SERVER_PING, CredentialTypeForMetrics.DO_NOT_SEND));
471+
472+
LoggingUtils.logRequest(request, SLF4JLOGGER, "auth pin MDS.");
464473
HttpResponse response = request.execute();
474+
LoggingUtils.logResponse(response, SLF4JLOGGER, "auth received response from MDS.");
465475
try {
466476
// Internet providers can return a generic response to all requests, so it is necessary
467477
// to check that metadata header is present also.
@@ -633,6 +643,8 @@ private String getDefaultServiceAccount() throws IOException {
633643
throw new IOException("Empty content from metadata token server request.");
634644
}
635645
GenericData responseData = response.parseAs(GenericData.class);
646+
LoggingUtils.logGenericData(
647+
responseData, SLF4JLOGGER, "Auth get default service account payload.");
636648
Map<String, Object> defaultAccount =
637649
OAuth2Utils.validateMap(responseData, "default", PARSE_ERROR_ACCOUNT);
638650
return OAuth2Utils.validateString(defaultAccount, "email", PARSE_ERROR_ACCOUNT);

oauth2_http/java/com/google/auth/oauth2/IamUtils.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import java.util.HashSet;
5757
import java.util.Map;
5858
import java.util.Set;
59+
import org.slf4j.Logger;
5960

6061
/**
6162
* This internal class provides shared utilities for interacting with the IAM API for common
@@ -68,6 +69,7 @@ class IamUtils {
6869
"https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/%s:generateIdToken";
6970
private static final String PARSE_ERROR_MESSAGE = "Error parsing error message response. ";
7071
private static final String PARSE_ERROR_SIGNATURE = "Error parsing signature response. ";
72+
private static final Logger LOGGER = LoggingUtils.getLogger(IamUtils.class);
7173

7274
// Following guidance for IAM retries:
7375
// https://cloud.google.com/iam/docs/retry-strategy#errors-to-retry
@@ -142,7 +144,9 @@ private static String getSignature(
142144
IamUtils.IAM_RETRYABLE_STATUS_CODES.contains(response.getStatusCode())));
143145
request.setIOExceptionHandler(new HttpBackOffIOExceptionHandler(backoff));
144146

147+
LoggingUtils.logRequest(request, LOGGER, "auth sending request to get signature.");
145148
HttpResponse response = request.execute();
149+
LoggingUtils.logResponse(response, LOGGER, "auth received response for signature.");
146150
int statusCode = response.getStatusCode();
147151
if (statusCode >= 400 && statusCode < HttpStatusCodes.STATUS_CODE_SERVER_ERROR) {
148152
GenericData responseError = response.parseAs(GenericData.class);
@@ -169,6 +173,7 @@ private static String getSignature(
169173
}
170174

171175
GenericData responseData = response.parseAs(GenericData.class);
176+
LoggingUtils.logGenericData(responseData, LOGGER, "Auth response payload.");
172177
return OAuth2Utils.validateString(responseData, "signedBlob", PARSE_ERROR_SIGNATURE);
173178
}
174179

@@ -220,7 +225,10 @@ static IdToken getIdToken(
220225
MetricsUtils.getGoogleCredentialsMetricsHeader(
221226
RequestType.ID_TOKEN_REQUEST, credentialTypeForMetrics));
222227

228+
LoggingUtils.logRequest(request, LOGGER, "auth sending request to get id token.");
223229
HttpResponse response = request.execute();
230+
231+
LoggingUtils.logResponse(response, LOGGER, "auth received response for id token.");
224232
int statusCode = response.getStatusCode();
225233
if (statusCode >= 400 && statusCode < HttpStatusCodes.STATUS_CODE_SERVER_ERROR) {
226234
GenericData responseError = response.parseAs(GenericData.class);
@@ -245,6 +253,7 @@ static IdToken getIdToken(
245253
}
246254

247255
GenericJson responseData = response.parseAs(GenericJson.class);
256+
LoggingUtils.logGenericData(responseData, LOGGER, "response data payload.");
248257
String rawToken = OAuth2Utils.validateString(responseData, "token", PARSE_ERROR_MESSAGE);
249258
return IdToken.create(rawToken);
250259
}

oauth2_http/java/com/google/auth/oauth2/ImpersonatedCredentials.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
import java.util.List;
6666
import java.util.Map;
6767
import java.util.Objects;
68+
import org.slf4j.Logger;
6869

6970
/**
7071
* ImpersonatedCredentials allowing credentials issued to a user or service account to impersonate
@@ -110,6 +111,7 @@ public class ImpersonatedCredentials extends GoogleCredentials
110111
private int lifetime;
111112
private String iamEndpointOverride;
112113
private final String transportFactoryClassName;
114+
private static final Logger LOGGER = LoggingUtils.getLogger(ImpersonatedCredentials.class);
113115

114116
private transient HttpTransportFactory transportFactory;
115117

@@ -546,12 +548,15 @@ public AccessToken refreshAccessToken() throws IOException {
546548

547549
HttpResponse response = null;
548550
try {
551+
LoggingUtils.logRequest(request, LOGGER, "auth sending refresh access token request.");
549552
response = request.execute();
553+
LoggingUtils.logResponse(response, LOGGER, "auth received response.");
550554
} catch (IOException e) {
551555
throw new IOException("Error requesting access token", e);
552556
}
553557

554558
GenericData responseData = response.parseAs(GenericData.class);
559+
LoggingUtils.logGenericData(responseData, LOGGER, "Auth response payload.");
555560
response.disconnect();
556561

557562
String accessToken =
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.google.auth.oauth2;
2+
3+
import com.google.api.client.http.HttpExecuteInterceptor;
4+
import com.google.api.client.http.HttpRequest;
5+
import com.google.api.client.http.HttpRequestInitializer;
6+
import com.google.api.client.http.HttpResponse;
7+
import com.google.api.client.http.HttpResponseInterceptor;
8+
import com.google.api.client.http.UrlEncodedContent;
9+
import java.io.IOException;
10+
import java.util.HashMap;
11+
import java.util.Map;
12+
import org.slf4j.Logger;
13+
import org.slf4j.event.Level;
14+
15+
public class LoggingInterceptor
16+
implements HttpExecuteInterceptor, HttpRequestInitializer, HttpResponseInterceptor {
17+
18+
private static final Logger logger = LoggingUtils.getLogger(LoggingInterceptor.class);
19+
20+
@Override
21+
public void intercept(HttpRequest request) throws IOException {
22+
// Log the request
23+
// StringBuilder requestLog = new StringBuilder("Sending request.");
24+
Map<String, String> loggingDataMap = new HashMap<>();
25+
loggingDataMap.put("request.method", request.getRequestMethod());
26+
loggingDataMap.put("request.url", request.getUrl().toString());
27+
// requestLog.append(request.getRequestMethod()).append(" ").append(request.getUrl());
28+
29+
Map<String, Object> headers = new HashMap<>();
30+
request.getHeaders().forEach((key, val) -> headers.put(key, val));
31+
loggingDataMap.put("request.headers", headers.toString());
32+
if (request.getContent() != null && logger.isDebugEnabled()) {
33+
loggingDataMap.put(
34+
"request.payload", ((UrlEncodedContent) request.getContent()).getData().toString());
35+
36+
LoggingUtils.logWithMDC(logger, Level.DEBUG, loggingDataMap, "Sending auth request");
37+
} else {
38+
39+
LoggingUtils.logWithMDC(logger, Level.INFO, loggingDataMap, "Sending auth request");
40+
}
41+
}
42+
43+
@Override
44+
public void interceptResponse(HttpResponse response) throws IOException {
45+
// Log the response
46+
// StringBuilder responseLog = new StringBuilder("Received response: ");
47+
// responseLog.append(response.getStatusCode()).append(" ").append(response.getStatusMessage());
48+
49+
Map<String, String> responseLogDataMap = new HashMap<>();
50+
responseLogDataMap.put("response.status", String.valueOf(response.getStatusCode()));
51+
responseLogDataMap.put("response.status.message", response.getStatusMessage());
52+
53+
Map<String, Object> headers = new HashMap<>();
54+
response.getHeaders().forEach((key, val) -> headers.put(key, val));
55+
responseLogDataMap.put("response.headers", headers.toString());
56+
57+
LoggingUtils.logWithMDC(logger, Level.INFO, responseLogDataMap, "Auth response.");
58+
}
59+
60+
@Override
61+
public void initialize(HttpRequest request) throws IOException {
62+
request.setInterceptor(this);
63+
request.setResponseInterceptor(this);
64+
}
65+
}

0 commit comments

Comments
 (0)