Skip to content

Commit cedec71

Browse files
authored
Change nonce and state to length 22 (#3645)
* Change nonce and state to length 22 * Add tests...
1 parent c7fcea4 commit cedec71

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

server/src/main/java/org/cloudfoundry/identity/uaa/provider/oauth/ExternalOAuthProviderConfigurator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public String getIdpAuthenticationUrl(
108108
}
109109

110110
if (OIDCIdentityProviderDefinition.class.equals(definition.getParameterizedClass())) {
111-
var nonceGenerator = new RandomValueStringGenerator(12);
111+
var nonceGenerator = new RandomValueStringGenerator(22);
112112
uriBuilder.queryParam("nonce", nonceGenerator.generate());
113113

114114
Map<String, String> additionalParameters = ofNullable(((OIDCIdentityProviderDefinition) definition).getAdditionalAuthzParameters()).orElse(emptyMap());
@@ -123,7 +123,7 @@ protected static boolean isPkceNeeded(AbstractExternalOAuthIdentityProviderDefin
123123
}
124124

125125
private String generateStateParam() {
126-
return uaaRandomStringUtil.getSecureRandom(10);
126+
return uaaRandomStringUtil.getSecureRandom(22);
127127
}
128128

129129
private String generateCodeVerifier() {

server/src/test/java/org/cloudfoundry/identity/uaa/provider/oauth/ExternalOAuthProviderConfiguratorTests.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,4 +585,30 @@ void idpWithAliasExistsInZone(final boolean resultFromDelegate) {
585585
when(mockIdentityProviderProvisioning.idpWithAliasExistsInZone(zoneId)).thenReturn(resultFromDelegate);
586586
assertThat(configurator.idpWithAliasExistsInZone(zoneId)).isEqualTo(resultFromDelegate);
587587
}
588+
589+
@Test
590+
void getIdpAuthenticationUrl_verifyNonceAndStateLength() {
591+
// Mock state generation (22 characters)
592+
String stateValue = "a".repeat(22); // exactly 22 characters
593+
when(mockUaaRandomStringUtil.getSecureRandom(22)).thenReturn(stateValue);
594+
595+
// Mock code verifier generation (128 characters) - needed for PKCE
596+
String codeVerifierValue = "b".repeat(128);
597+
when(mockUaaRandomStringUtil.getSecureRandom(128)).thenReturn(codeVerifierValue);
598+
599+
String authzUri = configurator.getIdpAuthenticationUrl(oidc, "alias", mockHttpServletRequest);
600+
Map<String, String> queryParams =
601+
UriComponentsBuilder.fromUriString(authzUri).build().getQueryParams().toSingleValueMap();
602+
603+
// Verify state is at least 22 characters
604+
assertThat(queryParams.get("state"))
605+
.as("State parameter should be at least 22 characters")
606+
.hasSizeGreaterThanOrEqualTo(22);
607+
608+
// Verify nonce exists and has expected length (RandomValueStringGenerator(22) generates 22 chars)
609+
assertThat(queryParams.get("nonce"))
610+
.as("Nonce parameter should be at least 22 characters")
611+
.isNotNull()
612+
.hasSizeGreaterThanOrEqualTo(22);
613+
}
588614
}

0 commit comments

Comments
 (0)