Skip to content

Commit 7be975b

Browse files
authored
Merge pull request #1004 from AzureAD/asram/deprecate_response_mode_query
Deprecate ResponseMode.QUERY in system browser auth flow, automatically override to FORM_POST with warning
2 parents f722aa0 + c318d3b commit 7be975b

3 files changed

Lines changed: 31 additions & 33 deletions

File tree

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,9 +368,17 @@ public Builder nonce(String val) {
368368

369369
/**
370370
* Specifies the method that should be used to send the authentication result to your app.
371+
* @deprecated ResponseMode.QUERY is deprecated. If you pass ResponseMode.QUERY, it will be automatically overridden to ResponseMode.FORM_POST.
371372
*/
372373
public Builder responseMode(ResponseMode val) {
373-
this.responseMode = val;
374+
// Override QUERY with FORM_POST as QUERY is deprecated
375+
if (val == ResponseMode.QUERY) {
376+
LOG.warn("ResponseMode.QUERY is deprecated and will be removed in a future release. " +
377+
"Automatically overriding to ResponseMode.FORM_POST.");
378+
this.responseMode = ResponseMode.FORM_POST;
379+
} else {
380+
this.responseMode = val;
381+
}
374382
return self();
375383
}
376384

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ public enum ResponseMode {
1818
/**
1919
* Authorization result returned as query string in the redirect URL when redirecting back to the
2020
* client application.
21+
* @deprecated Query response mode is no longer supported. Use FORM_POST instead. If provided, it will be automatically overridden to FORM_POST.
2122
*/
23+
@Deprecated
2224
QUERY("query"),
2325

2426
/**

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

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -98,34 +98,35 @@ void testBuilder_conflictingParameters() {
9898
}
9999

100100
@Test
101-
void testBuilder_optionalParameters() throws UnsupportedEncodingException {
102-
Set<String> clientCapabilities = new HashSet<>();
103-
clientCapabilities.add("llt");
104-
clientCapabilities.add("ssm");
105-
106-
PublicClientApplication app = PublicClientApplication.builder("client_id").clientCapabilities(clientCapabilities).build();
101+
void testBuilder_responseMode() throws UnsupportedEncodingException {
102+
PublicClientApplication app = PublicClientApplication.builder("client_id").build();
107103

108104
String redirectUri = "http://localhost:8080";
109105
Set<String> scope = Collections.singleton("scope");
110106

111107
AuthorizationRequestUrlParameters parameters =
112108
AuthorizationRequestUrlParameters
113109
.builder(redirectUri, scope)
114-
.extraScopesToConsent(new LinkedHashSet<>(Arrays.asList("extraScopeToConsent1", "extraScopeToConsent2")))
115-
.responseMode(ResponseMode.QUERY)
116-
.codeChallenge("challenge")
117-
.codeChallengeMethod("method")
118-
.state("app_state")
119-
.nonce("app_nonce")
120-
.correlationId("corr_id")
121-
.loginHint("hint")
122-
.domainHint("domain_hint")
123-
.claimsChallenge("{\"id_token\":{\"auth_time\":{\"essential\":true}},\"access_token\":{\"auth_time\":{\"essential\":true}}}")
124-
.prompt(Prompt.SELECT_ACCOUNT)
110+
.responseMode(ResponseMode.QUERY) // This should be overridden to FORM_POST
125111
.build();
126112

113+
assertEquals(parameters.responseMode(), ResponseMode.FORM_POST);
114+
assertEquals(parameters.redirectUri(), redirectUri);
115+
assertEquals(parameters.scopes().size(), 4);
116+
117+
assertNull(parameters.loginHint());
118+
assertNull(parameters.codeChallenge());
119+
assertNull(parameters.codeChallengeMethod());
120+
assertNull(parameters.correlationId());
121+
assertNull(parameters.nonce());
122+
assertNull(parameters.prompt());
123+
assertNull(parameters.state());
124+
127125
URL authorizationUrl = app.getAuthorizationRequestUrl(parameters);
128126

127+
assertEquals(authorizationUrl.getHost(), "login.microsoftonline.com");
128+
assertEquals(authorizationUrl.getPath(), "/common/oauth2/v2.0/authorize");
129+
129130
Map<String, String> queryParameters = new HashMap<>();
130131
String query = authorizationUrl.getQuery();
131132

@@ -137,23 +138,10 @@ void testBuilder_optionalParameters() throws UnsupportedEncodingException {
137138
URLDecoder.decode(pair.substring(idx + 1), "UTF-8"));
138139
}
139140

140-
assertEquals(queryParameters.get("scope"),
141-
"openid profile offline_access scope extraScopeToConsent1 extraScopeToConsent2");
141+
assertEquals(queryParameters.get("scope"), "openid profile offline_access scope");
142142
assertEquals(queryParameters.get("response_type"), "code");
143143
assertEquals(queryParameters.get("redirect_uri"), "http://localhost:8080");
144144
assertEquals(queryParameters.get("client_id"), "client_id");
145-
assertEquals(queryParameters.get("prompt"), "select_account");
146-
assertEquals(queryParameters.get("response_mode"), "query");
147-
assertEquals(queryParameters.get("code_challenge"), "challenge");
148-
assertEquals(queryParameters.get("code_challenge_method"), "method");
149-
assertEquals(queryParameters.get("state"), "app_state");
150-
assertEquals(queryParameters.get("nonce"), "app_nonce");
151-
assertEquals(queryParameters.get("correlation_id"), "corr_id");
152-
assertEquals(queryParameters.get("login_hint"), "hint");
153-
assertEquals(queryParameters.get("domain_hint"), "domain_hint");
154-
assertEquals(queryParameters.get("claims"), "{\"access_token\":{\"auth_time\":{\"essential\":true},\"xms_cc\":{\"values\":[\"llt\",\"ssm\"]}},\"id_token\":{\"auth_time\":{\"essential\":true}}}");
155-
156-
// CCS routing
157-
assertEquals(queryParameters.get(HttpHeaders.X_ANCHOR_MAILBOX), String.format(HttpHeaders.X_ANCHOR_MAILBOX_UPN_FORMAT, "hint"));
145+
assertEquals(queryParameters.get("response_mode"), "form_post");
158146
}
159147
}

0 commit comments

Comments
 (0)