diff --git a/java-security-test/src/main/java/com/sap/cloud/security/test/JwtGenerator.java b/java-security-test/src/main/java/com/sap/cloud/security/test/JwtGenerator.java index 758e67225..20460f36b 100644 --- a/java-security-test/src/main/java/com/sap/cloud/security/test/JwtGenerator.java +++ b/java-security-test/src/main/java/com/sap/cloud/security/test/JwtGenerator.java @@ -449,8 +449,19 @@ private void putScopesInJsonPayload() { } private String createTokenAsString() { - String header = base64Encode(jsonHeader.toString().getBytes()); - String payload = base64Encode(jsonPayload.toString().getBytes()); + //Sort the header and payload to get a deterministic Token each time + //Ensure keys and values are correctly formatted as JSON strings + JSONObject jsonObject = new JSONObject(); + List headerlist = new ArrayList<>(); + jsonHeader.keySet().forEach(key -> headerlist.add("\"" + key.toString() + "\":" + jsonObject.valueToString(jsonHeader.get(key)))); + Collections.sort(headerlist); + String header = "{" + String.join(", ", headerlist) + "}"; + List payloadlist = new ArrayList<>(); + jsonPayload.keySet().forEach(key -> payloadlist.add("\"" + key.toString() + "\":" + jsonObject.valueToString(jsonPayload.get(key)))); + Collections.sort(payloadlist); + String payload = "{" + String.join(", ", payloadlist) + "}"; + header = base64Encode(header.getBytes()); + payload = base64Encode(payload.getBytes()); String headerAndPayload = header + DOT + payload; String signature = calculateSignature(headerAndPayload); return headerAndPayload + DOT + signature; diff --git a/spring-security-compatibility/src/test/java/com/sap/cloud/security/comp/XsuaaTokenCompTest.java b/spring-security-compatibility/src/test/java/com/sap/cloud/security/comp/XsuaaTokenCompTest.java index 39b5fe218..99694f36f 100644 --- a/spring-security-compatibility/src/test/java/com/sap/cloud/security/comp/XsuaaTokenCompTest.java +++ b/spring-security-compatibility/src/test/java/com/sap/cloud/security/comp/XsuaaTokenCompTest.java @@ -227,7 +227,7 @@ void getSubdomainFails() { @Test void getAppToken() { token = XsuaaTokenComp.createInstance(jwtGenerator.createToken()); - assertThat(token.getAppToken(), startsWith("eyJqa3UiOiJodHRwOi8vbG9jYWx")); + assertThat(token.getAppToken(), startsWith("eyJhbGciOiJSUzI1NiIsICJqa3U")); } @Test