Skip to content

Commit ac70a27

Browse files
authored
fix: disabling self-signed jwt for domain wide delegation (#754)
* disabling self-signed jwt for domain wide delegation * fix: nit fixes
1 parent 8e8c73a commit ac70a27

File tree

3 files changed

+38
-7
lines changed

3 files changed

+38
-7
lines changed

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -1018,7 +1018,8 @@ public Map<String, List<String>> getRequestMetadata(URI uri) throws IOException
10181018

10191019
// If scopes are provided but we cannot use self signed JWT, then use scopes to get access
10201020
// token.
1021-
if (!createScopedRequired() && !useJwtAccessWithScope) {
1021+
if ((!createScopedRequired() && !useJwtAccessWithScope)
1022+
|| (serviceAccountUser != null && serviceAccountUser.length() > 0)) {
10221023
return super.getRequestMetadata(uri);
10231024
}
10241025

oauth2_http/javatests/com/google/auth/oauth2/ServiceAccountCredentialsTest.java

+36-4
Original file line numberDiff line numberDiff line change
@@ -1355,7 +1355,6 @@ public void getRequestMetadata_selfSignedJWT_withScopes() throws IOException {
13551355
.setPrivateKey(privateKey)
13561356
.setPrivateKeyId(PRIVATE_KEY_ID)
13571357
.setScopes(SCOPES)
1358-
.setServiceAccountUser(USER)
13591358
.setProjectId(PROJECT_ID)
13601359
.setHttpTransportFactory(new MockTokenServerTransportFactory())
13611360
.setUseJwtAccessWithScope(true)
@@ -1366,16 +1365,51 @@ public void getRequestMetadata_selfSignedJWT_withScopes() throws IOException {
13661365
}
13671366

13681367
@Test
1369-
public void getRequestMetadata_selfSignedJWT_withAudience() throws IOException {
1368+
public void refreshAccessToken_withDomainDelegation_selfSignedJWT_disabled() throws IOException {
1369+
final String accessToken1 = "1/MkSJoj1xsli0AccessToken_NKPY2";
1370+
final String accessToken2 = "2/MkSJoj1xsli0AccessToken_NKPY2";
1371+
MockTokenServerTransportFactory transportFactory = new MockTokenServerTransportFactory();
1372+
MockTokenServerTransport transport = transportFactory.transport;
13701373
PrivateKey privateKey = ServiceAccountCredentials.privateKeyFromPkcs8(PRIVATE_KEY_PKCS8);
13711374
GoogleCredentials credentials =
13721375
ServiceAccountCredentials.newBuilder()
13731376
.setClientId(CLIENT_ID)
13741377
.setClientEmail(CLIENT_EMAIL)
13751378
.setPrivateKey(privateKey)
13761379
.setPrivateKeyId(PRIVATE_KEY_ID)
1380+
.setScopes(SCOPES)
13771381
.setServiceAccountUser(USER)
13781382
.setProjectId(PROJECT_ID)
1383+
.setHttpTransportFactory(transportFactory)
1384+
.setUseJwtAccessWithScope(true)
1385+
.build();
1386+
1387+
transport.addServiceAccount(CLIENT_EMAIL, accessToken1);
1388+
Map<String, List<String>> metadata = credentials.getRequestMetadata(CALL_URI);
1389+
TestUtils.assertContainsBearerToken(metadata, accessToken1);
1390+
1391+
try {
1392+
verifyJwtAccess(metadata, "dummy.scope");
1393+
fail("jwt access should fail with ServiceAccountUser");
1394+
} catch (Exception ex) {
1395+
// expected
1396+
}
1397+
1398+
transport.addServiceAccount(CLIENT_EMAIL, accessToken2);
1399+
credentials.refresh();
1400+
TestUtils.assertContainsBearerToken(credentials.getRequestMetadata(CALL_URI), accessToken2);
1401+
}
1402+
1403+
@Test
1404+
public void getRequestMetadata_selfSignedJWT_withAudience() throws IOException {
1405+
PrivateKey privateKey = ServiceAccountCredentials.privateKeyFromPkcs8(PRIVATE_KEY_PKCS8);
1406+
GoogleCredentials credentials =
1407+
ServiceAccountCredentials.newBuilder()
1408+
.setClientId(CLIENT_ID)
1409+
.setClientEmail(CLIENT_EMAIL)
1410+
.setPrivateKey(privateKey)
1411+
.setPrivateKeyId(PRIVATE_KEY_ID)
1412+
.setProjectId(PROJECT_ID)
13791413
.setHttpTransportFactory(new MockTokenServerTransportFactory())
13801414
.build();
13811415

@@ -1393,7 +1427,6 @@ public void getRequestMetadata_selfSignedJWT_withDefaultScopes() throws IOExcept
13931427
.setPrivateKey(privateKey)
13941428
.setPrivateKeyId(PRIVATE_KEY_ID)
13951429
.setScopes(null, SCOPES)
1396-
.setServiceAccountUser(USER)
13971430
.setProjectId(PROJECT_ID)
13981431
.setHttpTransportFactory(new MockTokenServerTransportFactory())
13991432
.setUseJwtAccessWithScope(true)
@@ -1412,7 +1445,6 @@ public void getRequestMetadataWithCallback_selfSignedJWT() throws IOException {
14121445
.setClientEmail(CLIENT_EMAIL)
14131446
.setPrivateKey(privateKey)
14141447
.setPrivateKeyId(PRIVATE_KEY_ID)
1415-
.setServiceAccountUser(USER)
14161448
.setProjectId(PROJECT_ID)
14171449
.setQuotaProjectId("my-quota-project-id")
14181450
.setHttpTransportFactory(new MockTokenServerTransportFactory())

oauth2_http/javatests/com/google/auth/oauth2/TokenVerifierTest.java

-2
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,6 @@ public void verifyRs256TokenWithLegacyCertificateUrlFormat()
242242
@Test
243243
public void verifyServiceAccountRs256Token()
244244
throws TokenVerifier.VerificationException, IOException {
245-
HttpTransportFactory httpTransportFactory =
246-
mockTransport(SERVICE_ACCOUNT_CERT_URL, readResourceAsString("service_account_keys.json"));
247245
TokenVerifier tokenVerifier =
248246
TokenVerifier.newBuilder()
249247
.setClock(FIXED_CLOCK)

0 commit comments

Comments
 (0)