keycloak-uncached
Merge pull request #4175 from mrezai/fix-pkce-s256-code-challenge KEYCLOAK-4956: …
6/21/2017 6:04:31 PM
Changes
Details
diff --git a/services/src/main/java/org/keycloak/protocol/oidc/endpoints/TokenEndpoint.java b/services/src/main/java/org/keycloak/protocol/oidc/endpoints/TokenEndpoint.java
index 6aa13e2..4870415 100644
--- a/services/src/main/java/org/keycloak/protocol/oidc/endpoints/TokenEndpoint.java
+++ b/services/src/main/java/org/keycloak/protocol/oidc/endpoints/TokenEndpoint.java
@@ -560,13 +560,9 @@ public class TokenEndpoint {
// https://tools.ietf.org/html/rfc7636#section-4.6
private String generateS256CodeChallenge(String codeVerifier) throws Exception {
MessageDigest md = MessageDigest.getInstance("SHA-256");
- md.update(codeVerifier.getBytes());
- StringBuilder sb = new StringBuilder();
- for (byte b : md.digest()) {
- String hex = String.format("%02x", b);
- sb.append(hex);
- }
- String codeVerifierEncoded = Base64Url.encode(sb.toString().getBytes());
+ md.update(codeVerifier.getBytes("ISO_8859_1"));
+ byte[] digestBytes = md.digest();
+ String codeVerifierEncoded = Base64Url.encode(digestBytes);
return codeVerifierEncoded;
}
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/OAuthProofKeyForCodeExchangeTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/OAuthProofKeyForCodeExchangeTest.java
index a72aa3a..20757c1 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/OAuthProofKeyForCodeExchangeTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/OAuthProofKeyForCodeExchangeTest.java
@@ -444,14 +444,10 @@ public class OAuthProofKeyForCodeExchangeTest extends AbstractKeycloakTest {
private String generateS256CodeChallenge(String codeVerifier) throws Exception {
MessageDigest md = MessageDigest.getInstance("SHA-256");
- md.update(codeVerifier.getBytes());
- StringBuilder sb = new StringBuilder();
- for (byte b : md.digest()) {
- String hex = String.format("%02x", b);
- sb.append(hex);
- }
- String codeChallenge = Base64Url.encode(sb.toString().getBytes());
- return codeChallenge;
+ md.update(codeVerifier.getBytes("ISO_8859_1"));
+ byte[] digestBytes = md.digest();
+ String codeChallenge = Base64Url.encode(digestBytes);
+ return codeChallenge;
}
private void expectSuccessfulResponseFromTokenEndpoint(String codeId, String sessionId, String code) throws Exception {