Skip to content

Commit 64b4807

Browse files
committed
Changes for porting
1 parent 9264857 commit 64b4807

File tree

1 file changed

+42
-18
lines changed

1 file changed

+42
-18
lines changed

sdk/identity/azure-identity/src/main/java/com/azure/identity/WorkloadIdentityCredential.java

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@
99
import com.azure.core.util.Configuration;
1010
import com.azure.core.util.CoreUtils;
1111
import com.azure.core.util.logging.ClientLogger;
12-
import com.azure.identity.implementation.IdentityClient;
13-
import com.azure.identity.implementation.IdentityClientBuilder;
1412
import com.azure.identity.implementation.IdentityClientOptions;
15-
import com.azure.identity.implementation.IdentitySyncClient;
1613
import com.azure.identity.implementation.util.LoggingUtil;
1714
import com.azure.identity.implementation.util.ValidationUtil;
1815
import reactor.core.publisher.Mono;
1916

17+
import java.io.IOException;
18+
import java.nio.charset.StandardCharsets;
19+
import java.nio.file.Files;
20+
import java.nio.file.Paths;
21+
2022
import static com.azure.identity.ManagedIdentityCredential.AZURE_FEDERATED_TOKEN_FILE;
2123

2224
/**
@@ -54,9 +56,9 @@
5456
*/
5557
public class WorkloadIdentityCredential implements TokenCredential {
5658
private static final ClientLogger LOGGER = new ClientLogger(WorkloadIdentityCredential.class);
57-
private final IdentityClient identityClient;
58-
private final IdentitySyncClient identitySyncClient;
59+
private final ClientAssertionCredential clientAssertionCredential;
5960
private final IdentityClientOptions identityClientOptions;
61+
private final String clientId;
6062

6163
/**
6264
* WorkloadIdentityCredential supports Azure workload identity on Kubernetes.
@@ -71,7 +73,7 @@ public class WorkloadIdentityCredential implements TokenCredential {
7173
ValidationUtil.validateTenantIdCharacterRange(tenantId, LOGGER);
7274

7375
Configuration configuration = identityClientOptions.getConfiguration() == null
74-
? Configuration.getGlobalConfiguration().clone()
76+
? Configuration.getGlobalConfiguration()
7577
: identityClientOptions.getConfiguration();
7678

7779
String tenantIdInput
@@ -88,44 +90,66 @@ public class WorkloadIdentityCredential implements TokenCredential {
8890
|| CoreUtils.isNullOrEmpty(federatedTokenFilePathInput)
8991
|| CoreUtils.isNullOrEmpty(clientIdInput)
9092
|| CoreUtils.isNullOrEmpty(identityClientOptions.getAuthorityHost()))) {
91-
IdentityClientBuilder builder = new IdentityClientBuilder().clientAssertionPath(federatedTokenFilePathInput)
92-
.clientId(clientIdInput)
93+
94+
ClientAssertionCredentialBuilder builder = new ClientAssertionCredentialBuilder()
9395
.tenantId(tenantIdInput)
94-
.identityClientOptions(identityClientOptions);
95-
identityClient = builder.build();
96-
identitySyncClient = builder.buildSyncClient();
96+
.clientId(clientIdInput)
97+
.clientAssertion(() -> readFederatedTokenFromFile(federatedTokenFilePathInput));
98+
builder.authorityHost(identityClientOptions.getAuthorityHost())
99+
.httpClient(identityClientOptions.getHttpClient())
100+
.maxRetry(identityClientOptions.getMaxRetry())
101+
.retryTimeout(identityClientOptions.getRetryTimeout());
102+
103+
if (identityClientOptions.getAdditionallyAllowedTenants() != null) {
104+
builder.additionallyAllowedTenants(identityClientOptions.getAdditionallyAllowedTenants().toArray(new String[0]));
105+
}
106+
107+
clientAssertionCredential = builder.build();
108+
this.clientId = clientIdInput;
97109
} else {
98-
identityClient = null;
99-
identitySyncClient = null;
110+
clientAssertionCredential = null;
111+
this.clientId = null;
100112
}
101113
this.identityClientOptions = identityClientOptions;
102114
}
103115

104116
@Override
105117
public Mono<AccessToken> getToken(TokenRequestContext request) {
106-
if (identityClient == null) {
118+
if (clientAssertionCredential == null) {
107119
return Mono.error(LoggingUtil.logCredentialUnavailableException(LOGGER, identityClientOptions,
108120
new CredentialUnavailableException("WorkloadIdentityCredential"
109121
+ " authentication unavailable. The workload options are not fully configured. See the troubleshooting"
110122
+ " guide for more information."
111123
+ " https://aka.ms/azsdk/java/identity/workloadidentitycredential/troubleshoot")));
112124
}
113-
return identityClient.authenticateWithWorkloadIdentityConfidentialClient(request);
125+
return clientAssertionCredential.getToken(request);
114126
}
115127

116128
@Override
117129
public AccessToken getTokenSync(TokenRequestContext request) {
118-
if (identitySyncClient == null) {
130+
if (clientAssertionCredential == null) {
119131
throw LoggingUtil.logCredentialUnavailableException(LOGGER, identityClientOptions,
120132
new CredentialUnavailableException("WorkloadIdentityCredential"
121133
+ " authentication unavailable. The workload options are not fully configured. See the troubleshooting"
122134
+ " guide for more information."
123135
+ " https://aka.ms/azsdk/java/identity/workloadidentitycredential/troubleshoot"));
124136
}
125-
return identitySyncClient.authenticateWithWorkloadIdentityConfidentialClient(request);
137+
return clientAssertionCredential.getTokenSync(request);
126138
}
127139

128140
String getClientId() {
129-
return this.identityClient.getClientId();
141+
return this.clientId;
142+
}
143+
144+
/**
145+
* Reads the federated token from the specified file path.
146+
* This token will be used as a client assertion for authentication.
147+
*/
148+
private String readFederatedTokenFromFile(String filePath) {
149+
try {
150+
return Files.readString(Paths.get(filePath), StandardCharsets.UTF_8).trim();
151+
} catch (IOException e) {
152+
throw LOGGER.logExceptionAsError(new RuntimeException("Failed to read federated token from file: " + filePath, e));
153+
}
130154
}
131155
}

0 commit comments

Comments
 (0)