Skip to content

Commit b0f1552

Browse files
committed
Ensure authorization header is not added to BatchRequests
1 parent 1b03a1e commit b0f1552

File tree

3 files changed

+72
-7
lines changed

3 files changed

+72
-7
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
### Changed
1313

14+
- 'Authorization' header should not be added to BatchRequest Json body. [#1483](https://github.com/microsoftgraph/msgraph-sdk-java-core/issues/1483)
15+
1416
## [3.1.0] - 2024-02-07
1517

1618
### Changed

src/main/java/com/microsoft/graph/core/content/BatchRequestContent.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -208,13 +208,16 @@ private void writeBatchRequestStep(BatchRequestStep requestStep, JsonWriter writ
208208
writer.value(rawBodyContent);
209209
}
210210
}
211-
if(headers.size() != 0 || requestBody != null) {
212-
writer.name(CoreConstants.BatchRequest.HEADERS);
213-
writer.beginObject();
214-
for(int i = 0; i < headers.size(); i++) {
215-
writer.name(headers.name(i)).value(headers.value(i));
216-
}
217-
writer.endObject();
211+
// If 'authorization' header is the only header, do not include headers object
212+
if(!(headers.names().size() == 1 && headers.names().contains("authorization")) && (headers.size() != 0 || requestBody != null)) {
213+
writer.name(CoreConstants.BatchRequest.HEADERS);
214+
writer.beginObject();
215+
for (int i = 0; i < headers.size(); i++) {
216+
// If multiple headers exist, do not include 'authorization' header
217+
if(!headers.name(i).equals("authorization"))
218+
writer.name(headers.name(i)).value(headers.value(i));
219+
}
220+
writer.endObject();
218221
}
219222
writer.endObject();
220223
}

src/test/java/com/microsoft/graph/core/content/BatchRequestContentTest.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
import com.microsoft.graph.core.models.BatchRequestStep;
77
import com.microsoft.graph.core.requests.IBaseClient;
88
import com.microsoft.kiota.HttpMethod;
9+
import com.microsoft.kiota.RequestHeaders;
910
import com.microsoft.kiota.RequestInformation;
1011
import com.microsoft.kiota.authentication.AnonymousAuthenticationProvider;
1112

13+
import com.microsoft.kiota.authentication.AuthenticationProvider;
14+
import com.microsoft.kiota.http.OkHttpRequestAdapter;
1215
import com.microsoft.kiota.http.middleware.UrlReplaceHandler;
1316
import okhttp3.*;
1417
import org.junit.jupiter.api.Assertions;
@@ -25,6 +28,7 @@
2528

2629
import static com.microsoft.graph.core.CoreConstants.ReplacementConstants.USERS_ENDPOINT_WITH_REPLACE_TOKEN;
2730
import static org.junit.jupiter.api.Assertions.*;
31+
import static org.mockito.Mockito.mock;
2832

2933
class BatchRequestContentTest {
3034
static final String requestUrl = "https://graph.microsoft.com/v1.0"+USERS_ENDPOINT_WITH_REPLACE_TOKEN;
@@ -234,6 +238,61 @@ void BatchRequestContent_GetBatchRequestContentFromStepDoesNotModifyDateTimes()
234238
assertEquals(expectedJson, requestContentString);
235239
}
236240
@Test
241+
void BatchRequestContent_DoNotAddAuthorizationHeader() throws Exception {
242+
OkHttpRequestAdapter adapter = new OkHttpRequestAdapter(mock(AuthenticationProvider.class));
243+
244+
String expectedJson = "{\n" +
245+
" \"requests\": [\n" +
246+
" {\n" +
247+
" \"id\": \"1\",\n" +
248+
" \"url\": \"/me\",\n" +
249+
" \"method\": \"GET\",\n" +
250+
" \"headers\": {\n" +
251+
" \"accept\": \"application/json\"\n" +
252+
" }\n" +
253+
" },\n" +
254+
" {\n" +
255+
" \"id\": \"2\",\n" +
256+
" \"url\": \"/me\",\n" +
257+
" \"method\": \"GET\"\n" +
258+
" }\n" +
259+
" ]\n" +
260+
"}";
261+
//The following string is the same size as a token
262+
String longBearerString = "bbcbbbcbccbbabbacbccccbccabbcacacaaabccbccbbbbaabbabcccccbcbcacbbccbcbcaaacaacccacccbabacccabbccbccacccabcbbbbbacaacccabaaacaabcbacbaabcacabcbaaaccaccbbaaaabbbabbcaabbacccccaabbcabbbbbbbaaababaaabbbbcbbbcacbaaccaccabbcbabbabacbcccacbaccacaacaaacbacbaaaacbcbbacbcaaaaabcababbbcaabaaaabaaccbaccaababcbccbbacbaaabcbcbcbaaabcccabcacbbcbbabcccaccbacaaccaaaabcaacaccababbcbcabbccbaaaaaacccbcbccbaaccabbacbaaaacaccabcbbbcaabccccbbabbccaaaccbbbabbabcbcabcbccabbaabaacaaabbacaaccbcabaaaabcaabbabccabbcabcabbbaaaacccbcbcbbaacbbbbbcbbabcbabcbbcbbbaacccaababaccbaabcccccabbcabcababacbcaacbbaabaaacaabbacabcbcabcaabcccccacbaaacccbcabacbcbbbcccaaabacccaabcbcaababaabbacacabcbccacbbcacbbcaaccbbbcccbaaaacbcacabbcaaaacbcaacaccccbbaaabcccaacbabbbcbbccbacabccabaabacbbbbbcbaaaaaccabcbccabcccbcccabababbbbcbbcbbcbcabaabaabccbabcbbbabaaacaaaabcbcabaccaaaaacbaaabcbaccbaccbabacbcabbcbcbbaabbbbccaacccaabacacbabbcacabcbaccbcacbccaabcbbacbacbacbbaaccaaaaccacbcababccccccbbcbacacaaabaaaccbaabaacccbaaabcbcaabaaaaabcabacbabcbbccccbacbaabccaaabcccbbacbbacacaccabbcaacbbbbcbcbbcaabaacbbbcbbcbaaacccbacbaabacacbbabcaaaacaabacbaacaaaabbcacbacbcccacbcabcccacacaaccbbbcaacabcccaaacbabaaccbcbaacacbacaababcabcbccabcabcccaacabacabccaacbbcabbcaacbccaababacccaccabacbbbaabaccbcabcaabbcccacccbcbcabbccabbabaaaccacccbcbacabcaabcaccbbcbaaacbaabbbbcbccbbcccaababababaabacccbbbcabbaaacbcaaabccbbbccabbbcccbcacacaaabbabcacbacaacbbbcbbbbbccabbbabcabbcbacccaaabaaacbaabbacabbabcbcbcacbbaabbabcbcaacbabbcccbabaaccabbacbcaaacabbbbcaacbccbbbbacbcabbbaabcacaaabaabbaaccabbcabcabbacaaaacacabbabccacbbabbbbcabbaaccabcccaabbaaaacaabcbacabbaacaccbbbbaaaaacbcbacbbaaaabbabcaacaaacbbaabcccbbcbaacabbbbcaccaaaabcacbcbaaabbbcabcabcbbbbacbaccaacbccaacbbcaccaaaaacbabbbcbcbacbacbaccaacbcbcbbcaaaabaaabaabccaaaabbcabaaabcbcccbbcbaacacbbacacbabbcbaccabacbabcbcaabbbaabccccccaaccbcbccccbbbbcabaaacbbbaacbbaccaabcbcaacaacaacacaababcccbacbbccccbcacbcbcaacaaaacccccccaccaababaacbaabbcbbbccaacbabbcbcaaabbccacbbaabbbbcbbccbcccbbcacabaaacbacacbcaaabcbccacacccbbaacbacbbcbabbcbbbbcaccbaaccbcbcaabcababcbbbcccbcbaababcacbacbbbacacacabbccabbbaaaaacaccbbccbccbabaababcbbccabcaaacaccacabbaabacacabaccabacbacabbccbabaccbabcccbbcbbbaaabbccabbcbbbacacbbbabbcbbacbcabacaccabbbcbabbcbcacbcbbabbbbcabcbbabbbcaaccbaaaaccbababbbaabcbbbaacabbbbcabcabbcabbacabbccccaabaaaaabbcbabacbacbabcabcccabbbccbbcccaacacaabbcbabcbabaaaababbbacabaacbabbabcbbbcbccbacbcbccbbbccccbacaccbaccaaabbaacbbaaabbbcaccbabbcccbbbbccacbbaaacabbbbaabbabcccabcbcbbccccbacccabbbaaabcacccaabbabaccccbbbcccccaacbbbccbcabbbcccababbbcacccccccabccbbcaabccbbbaaccabbcaabcacabbcbbabcccaccccaaacbbbccaaabcbacabbbacbaccaabcbabababbcbcacaabcaabcbcbbcaaacaacabaaababbbacaccababaccbacacacacacbcccbabcbabcabccbaabcccababcbacbccccccacacbbacccccbaccbacaacbacacbcccccaaaacbaaaaccbacbbcacccbbbaabaaaccaccbcabcccccacaaaabcbabbacbbbcaaababcbacccbabcbaaabbcbaaacaabbcaaccaaccbacbaaaaaaabbaacaaabacbbcaacaacabbcabaccaaacbaccccbcccbcbcaaacbacaacccaccaacabacaaaabbbbbbbcacacbabccacacabbbababbbbcbabaaacaaacbacbcabbccacaacccbbbcbbacaccbbbaaabababbcbaacbcabcabaaccbcaaacbbbaacacccbbcaabcbacabbccbcbbbabbbaabacacaccaabbcbbaccbaaabcabbababaccca";
263+
RequestInformation requestInfo = new RequestInformation();
264+
requestInfo.urlTemplate = "{+baseurl}/users/{user%2Did}{?%24expand,%24select}";
265+
HashMap<String, Object> pathParameters = new HashMap<>();
266+
pathParameters.put("baseurl", "https://graph.microsoft.com/v1.0");
267+
pathParameters.put("user%2Did", "TokenToReplace");
268+
requestInfo.pathParameters = pathParameters;
269+
requestInfo.httpMethod = HttpMethod.GET;
270+
// Only one header should be present in the headers object of the Json Body
271+
requestInfo.headers.add("accept", "application/json");
272+
requestInfo.headers.add("authorization", longBearerString);
273+
RequestInformation requestInfo2 = new RequestInformation();
274+
requestInfo2.urlTemplate = "{+baseurl}/users/{user%2Did}{?%24expand,%24select}";
275+
HashMap<String, Object> pathParameters2 = new HashMap<>();
276+
pathParameters2.put("baseurl", "https://graph.microsoft.com/v1.0");
277+
pathParameters2.put("user%2Did", "TokenToReplace");
278+
requestInfo2.pathParameters = pathParameters2;
279+
requestInfo2.httpMethod = HttpMethod.GET;
280+
// No headers object should be present in the Json body
281+
requestInfo2.headers.add("authorization", longBearerString);
282+
283+
BatchRequestContent batchRequestContent = new BatchRequestContent(client);
284+
batchRequestContent.addBatchRequestStep(new BatchRequestStep("1",adapter.convertToNativeRequest(requestInfo)));
285+
batchRequestContent.addBatchRequestStep(new BatchRequestStep("2",adapter.convertToNativeRequest(requestInfo2)));
286+
287+
InputStream stream = batchRequestContent.getBatchRequestContent();
288+
String requestContentString = readInputStream(stream);
289+
requestContentString = requestContentString.replace("\n", "").replaceAll("\\s", "");
290+
expectedJson = expectedJson.replace("\n", "").replaceAll("\\s", "");
291+
292+
assertNotNull(requestContentString);
293+
assertEquals(expectedJson, requestContentString);
294+
}
295+
@Test
237296
void BatchRequestContent_AddBatchRequestStepWithHttpRequestMessage() {
238297
BatchRequestContent batchRequestContent = new BatchRequestContent(client);
239298
assertTrue(batchRequestContent.getBatchRequestSteps().isEmpty());
@@ -248,6 +307,7 @@ void BatchRequestContent_AddBatchRequestStepWithHttpRequestMessage() {
248307
Assertions.assertEquals(batchRequestContent.getBatchRequestSteps().get(requestId).getRequest().url().uri().toString(), request.url().uri().toString());
249308
Assertions.assertEquals(batchRequestContent.getBatchRequestSteps().get(requestId).getRequest().method(), request.method());
250309
}
310+
251311
@Test
252312
void BatchRequestContent_AddBatchRequestStepWithHttpRequestMessageToBatchRequestContentWithMaxSteps() {
253313
BatchRequestContent batchRequestContent = new BatchRequestContent(client);

0 commit comments

Comments
 (0)