Skip to content

Commit 76578e2

Browse files
Merge pull request #709 from AzureAD/nebharg/MsiInitial
Missed to add these changes to the merged PR
2 parents aa7857a + 392c93e commit 76578e2

File tree

8 files changed

+54
-83
lines changed

8 files changed

+54
-83
lines changed

msal4j-sdk/src/main/java/com/microsoft/aad/msal4j/AbstractManagedIdentitySource.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,17 @@ abstract class AbstractManagedIdentitySource {
2727
private static final String MANAGED_IDENTITY_NO_RESPONSE_RECEIVED = "[Managed Identity] Authentication unavailable. No response received from the managed identity endpoint.";
2828

2929
protected final ManagedIdentityRequest managedIdentityRequest;
30-
private ServiceBundle serviceBundle;
30+
protected final ServiceBundle serviceBundle;
3131
private ManagedIdentitySourceType managedIdentitySourceType;
3232

3333
@Getter
3434
@Setter
3535
private boolean isUserAssignedManagedIdentity;
36+
3637
@Getter
3738
@Setter
3839
private String managedIdentityUserAssignedClientId;
40+
3941
@Getter
4042
@Setter
4143
private String managedIdentityUserAssignedResourceId;

msal4j-sdk/src/main/java/com/microsoft/aad/msal4j/AcquireTokenByManagedIdentitySupplier.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ private AuthenticationResult createFromManagedIdentityResponse(ManagedIdentityRe
9494

9595
return AuthenticationResult.builder()
9696
.accessToken(managedIdentityResponse.getAccessToken())
97-
.scopes(managedIdentityParameters.getResource())
97+
.scopes(managedIdentityParameters.resource())
9898
.expiresOn(expiresOn)
9999
.extExpiresOn(0)
100100
.refreshOn(refreshOn)

msal4j-sdk/src/main/java/com/microsoft/aad/msal4j/AppServiceManagedIdentitySource.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88

99
import java.net.URI;
1010
import java.net.URISyntaxException;
11+
import java.util.Collections;
1112
import java.util.HashMap;
13+
import java.util.List;
1214
import java.util.Map;
1315

1416
class AppServiceManagedIdentitySource extends AbstractManagedIdentitySource{
@@ -28,27 +30,26 @@ public void createManagedIdentityRequest(String resource) {
2830
managedIdentityRequest.baseEndpoint = endpoint;
2931
managedIdentityRequest.method = HttpMethod.GET;
3032

31-
Map<String, String> headers = new HashMap<>();
32-
headers.put(SECRET_HEADER_NAME, secret);
33-
managedIdentityRequest.headers = headers;
33+
managedIdentityRequest.headers = new HashMap<>();
34+
managedIdentityRequest.headers.put(SECRET_HEADER_NAME, secret);
3435

35-
Map<String, String> queryParameters = new HashMap<>();
36-
queryParameters.put("api-version", APP_SERVICE_MSI_API_VERSION );
37-
queryParameters.put("resource", resource);
36+
managedIdentityRequest.queryParameters = new HashMap<>();
37+
managedIdentityRequest.queryParameters.put("api-version", Collections.singletonList(APP_SERVICE_MSI_API_VERSION));
38+
managedIdentityRequest.queryParameters.put("resource", Collections.singletonList(resource));
3839

40+
String clientId = getManagedIdentityUserAssignedClientId();
41+
String resourceId = getManagedIdentityUserAssignedResourceId();
3942
if (!StringHelper.isNullOrBlank(getManagedIdentityUserAssignedClientId()))
4043
{
4144
LOG.info("[Managed Identity] Adding user assigned client id to the request.");
42-
queryParameters.put(Constants.MANAGED_IDENTITY_CLIENT_ID, getManagedIdentityUserAssignedClientId());
45+
managedIdentityRequest.queryParameters.put(Constants.MANAGED_IDENTITY_CLIENT_ID, Collections.singletonList(getManagedIdentityUserAssignedClientId()));
4346
}
4447

4548
if (!StringHelper.isNullOrBlank(getManagedIdentityUserAssignedResourceId()))
4649
{
4750
LOG.info("[Managed Identity] Adding user assigned resource id to the request.");
48-
queryParameters.put(Constants.MANAGED_IDENTITY_RESOURCE_ID, getManagedIdentityUserAssignedResourceId());
51+
managedIdentityRequest.queryParameters.put(Constants.MANAGED_IDENTITY_RESOURCE_ID, Collections.singletonList(getManagedIdentityUserAssignedResourceId()));
4952
}
50-
51-
managedIdentityRequest.queryParameters = queryParameters;
5253
}
5354

5455
private AppServiceManagedIdentitySource(MsalRequest msalRequest, ServiceBundle serviceBundle, URI endpoint, String secret)

msal4j-sdk/src/main/java/com/microsoft/aad/msal4j/IMDSManagedIdentitySource.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.net.HttpURLConnection;
1010
import java.net.URI;
1111
import java.net.URISyntaxException;
12+
import java.util.Collections;
1213
import java.util.HashMap;
1314
import java.util.Map;
1415

@@ -77,29 +78,26 @@ public void createManagedIdentityRequest(String resource) {
7778
managedIdentityRequest.baseEndpoint = imdsEndpoint;
7879
managedIdentityRequest.method = HttpMethod.GET;
7980

80-
Map<String, String> headers = new HashMap<>();
81-
headers.put("Metadata", "true");
82-
managedIdentityRequest.headers = headers;
81+
managedIdentityRequest.headers = new HashMap<>();
82+
managedIdentityRequest.headers.put("Metadata", "true");
8383

84-
Map<String, String> queryParameters = new HashMap<>();
85-
queryParameters.put("api-version",imdsApiVersion);
86-
queryParameters.put("resource", resource);
84+
managedIdentityRequest.queryParameters = new HashMap<>();
85+
managedIdentityRequest.queryParameters.put("api-version", Collections.singletonList(imdsApiVersion));
86+
managedIdentityRequest.queryParameters.put("resource", Collections.singletonList(resource));
8787

8888
String clientId = getManagedIdentityUserAssignedClientId();
8989
String resourceId = getManagedIdentityUserAssignedResourceId();
9090
if (!StringHelper.isNullOrBlank(clientId))
9191
{
9292
LOG.info("[Managed Identity] Adding user assigned client id to the request.");
93-
queryParameters.put(Constants.MANAGED_IDENTITY_CLIENT_ID, clientId);
93+
managedIdentityRequest.queryParameters.put(Constants.MANAGED_IDENTITY_CLIENT_ID, Collections.singletonList(clientId));
9494
}
9595

9696
if (!StringHelper.isNullOrBlank(resourceId))
9797
{
9898
LOG.info("[Managed Identity] Adding user assigned resource id to the request.");
99-
queryParameters.put(Constants.MANAGED_IDENTITY_RESOURCE_ID, resourceId);
99+
managedIdentityRequest.queryParameters.put(Constants.MANAGED_IDENTITY_RESOURCE_ID, Collections.singletonList(resourceId));
100100
}
101-
102-
managedIdentityRequest.queryParameters = queryParameters;
103101
}
104102

105103
@Override

msal4j-sdk/src/main/java/com/microsoft/aad/msal4j/ManagedIdentityApplication.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
*/
1818
public class ManagedIdentityApplication extends AbstractClientApplicationBase implements IManagedIdentityApplication {
1919

20-
private String resource;
21-
2220
@Getter
2321
private final ManagedIdentityId managedIdentityId;
2422

@@ -31,7 +29,7 @@ private ManagedIdentityApplication(Builder builder) {
3129
/**
3230
* Creates instance of Builder of ManagedIdentityApplication
3331
*
34-
* @param managedIdentityId ManagedIdentityId to specify if it System Assigned or User Assigned
32+
* @param managedIdentityId ManagedIdentityId to specify if System Assigned or User Assigned
3533
* and provide id if it is user assigned.
3634
* @return instance of Builder of ManagedIdentityApplication
3735
*/
@@ -68,6 +66,7 @@ private Builder(ManagedIdentityId managedIdentityId) {
6866
super(managedIdentityId.getIdType() == ManagedIdentityIdType.SystemAssigned ?
6967
"system_assigned_managed_identity" : managedIdentityId.getUserAssignedId());
7068

69+
7170
this.managedIdentityId = managedIdentityId;
7271
this.isInstanceDiscoveryEnabled = false;
7372
}

msal4j-sdk/src/main/java/com/microsoft/aad/msal4j/ManagedIdentityParameters.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,6 @@ public class ManagedIdentityParameters implements IAcquireTokenParameters {
2828

2929
IEnvironmentVariables environmentVariables;
3030

31-
public String getResource() {
32-
return resource;
33-
}
34-
35-
public void setResource(String resource) {
36-
this.resource = resource;
37-
}
38-
39-
public boolean isForceRefresh() {
40-
return forceRefresh;
41-
}
42-
43-
public void setForceRefresh(boolean forceRefresh) {
44-
this.forceRefresh = forceRefresh;
45-
}
46-
4731
@Override
4832
public Set<String> scopes() {
4933
return null;

msal4j-sdk/src/main/java/com/microsoft/aad/msal4j/ManagedIdentityRequest.java

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@
33

44
package com.microsoft.aad.msal4j;
55

6+
import com.nimbusds.oauth2.sdk.util.URIUtils;
7+
import com.nimbusds.oauth2.sdk.util.URLUtils;
8+
69
import java.net.MalformedURLException;
710
import java.net.URI;
811
import java.net.URISyntaxException;
912
import java.net.URL;
1013
import java.util.HashMap;
14+
import java.util.List;
1115
import java.util.Map;
1216

1317
class ManagedIdentityRequest extends MsalRequest {
@@ -20,9 +24,9 @@ class ManagedIdentityRequest extends MsalRequest {
2024

2125
Map<String, String> bodyParameters;
2226

23-
Map<String, String> queryParameters;
27+
Map<String, List<String>> queryParameters;
2428

25-
public ManagedIdentityRequest(ManagedIdentityApplication managedIdentityApplication, RequestContext requestContext){
29+
public ManagedIdentityRequest(ManagedIdentityApplication managedIdentityApplication, RequestContext requestContext) {
2630
super(managedIdentityApplication, requestContext);
2731
}
2832

@@ -35,22 +39,13 @@ public URL computeURI() throws URISyntaxException {
3539
}
3640
}
3741

38-
private String appendQueryParametersToBaseEndpoint(){
39-
StringBuilder stringBuilder = new StringBuilder(baseEndpoint.toString());
40-
if(!queryParameters.isEmpty()){
41-
stringBuilder.append("?");
42-
}
43-
boolean isFirstValue = true;
44-
for(String key: queryParameters.keySet()){
45-
if(!isFirstValue){
46-
stringBuilder.append("&");
47-
}
48-
String toAppend = key + "=" + queryParameters.get(key);
49-
stringBuilder.append(toAppend);
50-
51-
isFirstValue = false;
42+
private String appendQueryParametersToBaseEndpoint() {
43+
if (queryParameters.isEmpty()) {
44+
return baseEndpoint.toString();
5245
}
5346

54-
return stringBuilder.toString();
47+
String queryString = URLUtils.serializeParameters(queryParameters);
48+
49+
return baseEndpoint.toString() + "?" + queryString;
5550
}
5651
}

msal4j-sdk/src/test/java/com/microsoft/aad/msal4j/ManagedIdentityTests.java

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
package com.microsoft.aad.msal4j;
55

6+
import com.nimbusds.oauth2.sdk.util.URLUtils;
67
import org.junit.jupiter.api.TestInstance;
78
import org.junit.jupiter.api.extension.ExtendWith;
89
import org.junit.jupiter.params.ParameterizedTest;
@@ -13,11 +14,12 @@
1314
import java.net.URISyntaxException;
1415
import java.time.Instant;
1516
import java.time.temporal.ChronoUnit;
17+
import java.util.Collections;
1618
import java.util.HashMap;
19+
import java.util.List;
1720
import java.util.Map;
1821

1922
import static org.junit.jupiter.api.Assertions.*;
20-
import static org.mockito.ArgumentMatchers.any;
2123
import static org.mockito.Mockito.*;
2224

2325
@ExtendWith(MockitoExtension.class)
@@ -49,61 +51,50 @@ private HttpRequest expectedRequest(ManagedIdentitySourceType source, String res
4951
}
5052

5153
private HttpRequest expectedRequest(ManagedIdentitySourceType source, String resource,
52-
ManagedIdentityId id)
53-
throws URISyntaxException {
54-
HttpRequest request;
54+
ManagedIdentityId id) {
5555
String endpoint = null;
5656
Map<String, String> headers = new HashMap<>();
57-
Map<String, String> queryParameters = new HashMap<>();
57+
Map<String, List<String>> queryParameters = new HashMap<>();
5858

5959
switch (source) {
6060
case AppService: {
6161
endpoint = appServiceEndpoint;
6262
queryParameters = new HashMap<>();
63-
queryParameters.put("api-version", "2019-08-01");
64-
queryParameters.put("resource", resource);
63+
queryParameters.put("api-version", Collections.singletonList("2019-08-01"));
64+
queryParameters.put("resource", Collections.singletonList(resource));
6565
headers = new HashMap<>();
6666
headers.put("X-IDENTITY-HEADER", "secret");
6767
break;
6868
}
6969
case Imds: {
7070
endpoint = IMDS_ENDPOINT;
71-
queryParameters.put("api-version", "2018-02-01");
72-
queryParameters.put("resource", resource);
71+
queryParameters.put("api-version", Collections.singletonList("2018-02-01"));
72+
queryParameters.put("resource", Collections.singletonList(resource));
7373
headers.put("Metadata", "true");
7474
break;
7575
}
7676
}
7777

7878
switch (id.getIdType()) {
7979
case ClientId:
80-
queryParameters.put("client_id", id.getUserAssignedId());
80+
queryParameters.put("client_id", Collections.singletonList(id.getUserAssignedId()));
8181
break;
8282
case ResourceId:
83-
queryParameters.put("mi_res_id", id.getUserAssignedId());
83+
queryParameters.put("mi_res_id", Collections.singletonList(id.getUserAssignedId()));
8484
break;
8585
}
8686

8787
return new HttpRequest(HttpMethod.GET, computeUri(endpoint, queryParameters), headers);
8888
}
8989

90-
private String computeUri(String endpoint, Map<String, String> queryParameters) {
91-
StringBuilder stringBuilder = new StringBuilder(endpoint);
92-
if(!queryParameters.isEmpty()){
93-
stringBuilder.append("?");
90+
private String computeUri(String endpoint, Map<String, List<String>> queryParameters) {
91+
if (queryParameters.isEmpty()) {
92+
return endpoint.toString();
9493
}
95-
boolean isFirstValue = true;
96-
for(String key: queryParameters.keySet()){
97-
if(!isFirstValue){
98-
stringBuilder.append("&");
99-
}
100-
String toAppend = key + "=" + queryParameters.get(key);
101-
stringBuilder.append(toAppend);
10294

103-
isFirstValue = false;
104-
}
95+
String queryString = URLUtils.serializeParameters(queryParameters);
10596

106-
return stringBuilder.toString();
97+
return endpoint.toString() + "?" + queryString;
10798
}
10899

109100
private HttpResponse expectedResponse(int statusCode, String response) {
@@ -196,6 +187,7 @@ void managedIdentityTest_DifferentScopes_RequestsNewToken(ManagedIdentitySourceT
196187
.build()).get();
197188

198189
assertNotNull(result.accessToken());
190+
// TODO: Assert token source to check the token source is IDP and not Cache.
199191
}
200192

201193
@ParameterizedTest

0 commit comments

Comments
 (0)