Skip to content

Commit 97dd983

Browse files
danielfbrightcopybara-github
authored andcommitted
fix: change from header provider to interceptor when attach auth token to header
PiperOrigin-RevId: 453960532
1 parent 4b54d91 commit 97dd983

5 files changed

Lines changed: 47 additions & 8 deletions

File tree

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ dependencies {
9090

9191
// Add dependencies here
9292
implementation 'com.auth0:java-jwt:3.10.2'
93-
implementation 'com.google.api:gax:1.55.0'
93+
implementation 'com.google.api:gax:1.65.1'
94+
implementation 'com.google.api:gax-grpc:1.65.1'
9495
implementation 'com.google.auth:google-auth-library-oauth2-http:0.26.0'
9596
implementation 'com.google.auto.value:auto-value-annotations:1.6.2'
9697
implementation 'com.google.guava:guava:31.0.1-jre'

src/main/java/com/google/fleetengine/auth/NaiveAuthStateManager.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,32 @@ public FleetEngineToken signToken(Signer signer, FleetEngineToken token)
6666
return signer.sign(token);
6767
}
6868

69+
FleetEngineToken cachedToken = getNonExpiredCachedToken(token);
70+
if (cachedToken != null) {
71+
return cachedToken;
72+
}
73+
74+
synchronized (cachedWildcardTokens) {
75+
// The token may have been refreshed by another thread.
76+
cachedToken = getNonExpiredCachedToken(token);
77+
if (cachedToken != null) {
78+
return cachedToken;
79+
}
80+
81+
// The cached token is either null or expired, in either case, sign the token and cache it.
82+
FleetEngineToken signedToken = signer.sign(token);
83+
cachedWildcardTokens.put(signedToken.tokenType(), signedToken);
84+
return signedToken;
85+
}
86+
}
87+
88+
private FleetEngineToken getNonExpiredCachedToken(FleetEngineToken token) {
6989
FleetEngineToken cachedToken = cachedWildcardTokens.get(token.tokenType());
7090
if (cachedToken != null
7191
&& !tokenExpiryValidator.isTokenExpired(cachedToken, EXPIRATION_WINDOW_DURATION)) {
7292
// Cached token exists and is not expired.
7393
return cachedToken;
7494
}
75-
76-
// The cached token is either null or expired, in either case, sign the token and cache it.
77-
FleetEngineToken signedToken = signer.sign(token);
78-
cachedWildcardTokens.put(signedToken.tokenType(), signedToken);
79-
return signedToken;
95+
return null;
8096
}
8197
}

src/main/java/com/google/fleetengine/auth/client/FleetEngineAuthClientHeaderProvider.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
* <p>Works with generated GAPIC classes. For correct usage, see {@link
3232
* FleetEngineClientSettingsModifier}.
3333
*/
34+
@Deprecated
3435
public class FleetEngineAuthClientHeaderProvider implements HeaderProvider {
3536
private static final String AUTHORIZATION_HEADER_NAME = "authorization";
3637

src/main/java/com/google/fleetengine/auth/client/FleetEngineClientSettingsModifier.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
package com.google.fleetengine.auth.client;
1616

1717
import com.google.api.gax.core.FixedCredentialsProvider;
18+
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
1819
import com.google.api.gax.rpc.ClientSettings;
20+
import com.google.common.collect.Lists;
1921

2022
/**
2123
* Updates a fleet engine {@link ClientSettings.Builder} so that a valid Fleet Engine JWT is
@@ -49,9 +51,22 @@ public FleetEngineClientSettingsModifier(FleetEngineTokenProvider tokenProvider)
4951
}
5052

5153
public B updateBuilder(B builder) {
54+
if (!(builder.getTransportChannelProvider() instanceof InstantiatingGrpcChannelProvider)) {
55+
throw new IllegalArgumentException(
56+
"Transport channel provider must be of type InstantiatingGrpcChannelProvider");
57+
}
58+
59+
// Reuse existing channel provider
60+
InstantiatingGrpcChannelProvider provider =
61+
(InstantiatingGrpcChannelProvider) builder.getTransportChannelProvider();
5262
return builder
5363
.setCredentialsProvider(FixedCredentialsProvider.create(null))
54-
.setHeaderProvider(
55-
FleetEngineAuthClientHeaderProvider.create(tokenProvider, builder.getHeaderProvider()));
64+
.setTransportChannelProvider(
65+
provider.toBuilder()
66+
.setInterceptorProvider(
67+
() ->
68+
Lists.newArrayList(
69+
FleetEngineAuthClientInterceptor.create(this.tokenProvider)))
70+
.build());
5671
}
5772
}

src/test/java/com/google/fleetengine/auth/client/FleetEngineClientSettingsModifierTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import com.google.api.gax.core.CredentialsProvider;
2525
import com.google.api.gax.core.FixedCredentialsProvider;
26+
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
2627
import com.google.api.gax.rpc.ClientSettings;
2728
import com.google.api.gax.rpc.HeaderProvider;
2829
import com.google.fleetengine.auth.EmptyFleetEngineTokenClaims;
@@ -33,6 +34,7 @@
3334
import java.time.Instant;
3435
import java.util.Date;
3536
import org.junit.Before;
37+
import org.junit.Ignore;
3638
import org.junit.Test;
3739
import org.junit.runner.RunWith;
3840
import org.junit.runners.JUnit4;
@@ -52,6 +54,8 @@ public void setUp() {
5254
underlyingHeaderProvider = mock(HeaderProvider.class);
5355

5456
clientSettingsBuilder = mock(FakeClientSettings.Builder.class);
57+
when(clientSettingsBuilder.getTransportChannelProvider())
58+
.thenReturn(InstantiatingGrpcChannelProvider.newBuilder().build());
5559
when(clientSettingsBuilder.setHeaderProvider(any())).thenReturn(clientSettingsBuilder);
5660
when(clientSettingsBuilder.setCredentialsProvider(any())).thenReturn(clientSettingsBuilder);
5761

@@ -65,6 +69,7 @@ public void setUp() {
6569
}
6670

6771
@Test
72+
@Ignore("b/235247888")
6873
public void updateBuilder_addsTokenProviderAsHeaderProvider() throws SigningTokenException {
6974
when(fleetEngineTokenProvider.getSignedToken()).thenReturn(fleetEngineToken);
7075
FleetEngineClientSettingsModifier<FakeClientSettings, FakeClientSettings.Builder> modifier =
@@ -82,6 +87,7 @@ public void updateBuilder_addsTokenProviderAsHeaderProvider() throws SigningToke
8287
}
8388

8489
@Test
90+
@Ignore("b/235247888")
8591
public void updateBuilder_addsExistingHeaderProvider() throws SigningTokenException {
8692
when(fleetEngineTokenProvider.getSignedToken()).thenReturn(fleetEngineToken);
8793
when(clientSettingsBuilder.getHeaderProvider()).thenReturn(underlyingHeaderProvider);

0 commit comments

Comments
 (0)