X Tutup
Skip to content

Commit adc920e

Browse files
author
Justin Dahmubed
committed
Urlencode and base32/base16 signature
1 parent f73bc80 commit adc920e

File tree

5 files changed

+28
-23
lines changed

5 files changed

+28
-23
lines changed

lib/src/main/java/com/auth0/jwt/algorithms/ECDSAAlgorithm.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.apache.commons.codec.binary.Hex;
1111
import org.apache.commons.codec.binary.StringUtils;
1212

13+
import java.net.URLDecoder;
1314
import java.nio.charset.StandardCharsets;
1415
import java.security.InvalidKeyException;
1516
import java.security.NoSuchAlgorithmException;
@@ -43,20 +44,20 @@ public void verify(DecodedJWT jwt, EncodeType encodeType) throws Exception {
4344
byte[] contentBytes = String.format("%s.%s", jwt.getHeader(), jwt.getPayload()).getBytes(StandardCharsets.UTF_8);
4445
byte[] signatureBytes = null;
4546
String signature = jwt.getSignature();
47+
String urlDecoded = null;
4648
switch (encodeType) {
4749
case Base16:
48-
signatureBytes = Hex.decodeHex(signature);
50+
urlDecoded = URLDecoder.decode(signature, "UTF-8");
51+
signatureBytes = Hex.decodeHex(urlDecoded);
4952
break;
5053
case Base32:
5154
Base32 base32 = new Base32();
52-
signatureBytes = base32.decode(signature);
55+
urlDecoded = URLDecoder.decode(signature, "UTF-8");
56+
signatureBytes = base32.decode(urlDecoded);
5357
break;
5458
case Base64:
5559
signatureBytes = Base64.decodeBase64(signature);
5660
break;
57-
case JsonEncode:
58-
signatureBytes = Base64.decodeBase64(signature);
59-
break;
6061
}
6162

6263
try {

lib/src/main/java/com/auth0/jwt/algorithms/HMACAlgorithm.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,21 +54,20 @@ public void verify(DecodedJWT jwt, EncodeType encodeType) throws Exception {
5454
byte[] contentBytes = String.format("%s.%s", jwt.getHeader(), jwt.getPayload()).getBytes(StandardCharsets.UTF_8);
5555
byte[] signatureBytes = null;
5656
String signature = jwt.getSignature();
57+
String urlDecoded = null;
5758
switch (encodeType) {
5859
case Base16:
59-
signatureBytes = Hex.decodeHex(signature);
60+
urlDecoded = URLDecoder.decode(signature, "UTF-8");
61+
signatureBytes = Hex.decodeHex(urlDecoded);
6062
break;
6163
case Base32:
6264
Base32 base32 = new Base32();
63-
signatureBytes = base32.decode(signature);
65+
urlDecoded = URLDecoder.decode(signature, "UTF-8");
66+
signatureBytes = base32.decode(urlDecoded);
6467
break;
6568
case Base64:
6669
signatureBytes = Base64.decodeBase64(signature);
6770
break;
68-
case JsonEncode:
69-
signatureBytes = Base64.decodeBase64(signature);
70-
break;
71-
7271
}
7372

7473
try {

lib/src/main/java/com/auth0/jwt/algorithms/NoneAlgorithm.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import org.apache.commons.codec.binary.Base64;
99
import org.apache.commons.codec.binary.Hex;
1010

11+
import java.net.URLDecoder;
12+
1113
class NoneAlgorithm extends Algorithm {
1214

1315
NoneAlgorithm() {
@@ -18,20 +20,20 @@ class NoneAlgorithm extends Algorithm {
1820
public void verify(DecodedJWT jwt, EncodeType encodeType) throws Exception {
1921
byte[] signatureBytes = null;
2022
String signature = jwt.getSignature();
23+
String urlDecoded = null;
2124
switch (encodeType) {
2225
case Base16:
23-
signatureBytes = Hex.decodeHex(signature);
26+
urlDecoded = URLDecoder.decode(signature, "UTF-8");
27+
signatureBytes = Hex.decodeHex(urlDecoded);
2428
break;
2529
case Base32:
2630
Base32 base32 = new Base32();
27-
signatureBytes = base32.decode(signature);
31+
urlDecoded = URLDecoder.decode(signature, "UTF-8");
32+
signatureBytes = base32.decode(urlDecoded);
2833
break;
2934
case Base64:
3035
signatureBytes = Base64.decodeBase64(signature);
3136
break;
32-
case JsonEncode:
33-
signatureBytes = Base64.decodeBase64(signature);
34-
break;
3537
}
3638
if (signatureBytes.length > 0) {
3739
throw new SignatureVerificationException(this);

lib/src/main/java/com/auth0/jwt/algorithms/RSAAlgorithm.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.apache.commons.codec.binary.Base64;
1010
import org.apache.commons.codec.binary.Hex;
1111

12+
import java.net.URLDecoder;
1213
import java.nio.charset.StandardCharsets;
1314
import java.security.InvalidKeyException;
1415
import java.security.NoSuchAlgorithmException;
@@ -40,20 +41,20 @@ public void verify(DecodedJWT jwt, EncodeType encodeType) throws Exception {
4041
byte[] contentBytes = String.format("%s.%s", jwt.getHeader(), jwt.getPayload()).getBytes(StandardCharsets.UTF_8);
4142
byte[] signatureBytes = null;
4243
String signature = jwt.getSignature();
44+
String urlDecoded = null;
4345
switch (encodeType) {
4446
case Base16:
45-
signatureBytes = Hex.decodeHex(signature);
47+
urlDecoded = URLDecoder.decode(signature, "UTF-8");
48+
signatureBytes = Hex.decodeHex(urlDecoded);
4649
break;
4750
case Base32:
4851
Base32 base32 = new Base32();
49-
signatureBytes = base32.decode(signature);
52+
urlDecoded = URLDecoder.decode(signature, "UTF-8");
53+
signatureBytes = base32.decode(urlDecoded);
5054
break;
5155
case Base64:
5256
signatureBytes = Base64.decodeBase64(signature);
5357
break;
54-
case JsonEncode:
55-
signatureBytes = Base64.decodeBase64(signature);
56-
break;
5758
}
5859

5960
try {

lib/src/main/java/com/auth0/jwt/creators/JWTCreator.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -398,8 +398,9 @@ private String signBase16Encoding() throws UnsupportedEncodingException {
398398
String content = String.format("%s.%s", encodedHeader, encodedPayload);
399399
byte[] signatureBytes = algorithm.sign(content.getBytes(StandardCharsets.UTF_8));
400400
String signature = Hex.encodeHexString(signatureBytes);
401+
String signatureFinal = URLEncoder.encode(signature, "UTF-8");
401402

402-
return String.format("%s.%s", content, signature);
403+
return String.format("%s.%s", content, signatureFinal);
403404
}
404405

405406
private String signBase32Encoding() throws UnsupportedEncodingException{
@@ -416,8 +417,9 @@ private String signBase32Encoding() throws UnsupportedEncodingException{
416417
String content = String.format("%s.%s", encodedHeader, encodedPayload);
417418
byte[] signatureBytes = algorithm.sign(content.getBytes(StandardCharsets.UTF_8));
418419
String signature = base32.encodeAsString(signatureBytes);
420+
String signatureFinal = URLEncoder.encode(signature, "UTF-8");
419421

420-
return String.format("%s.%s", content, signature);
422+
return String.format("%s.%s", content, signatureFinal);
421423
}
422424

423425
private String defaultSign() throws SignatureGenerationException {

0 commit comments

Comments
 (0)
X Tutup