11package com .auth0 .jwt ;
22
3+ import com .auth0 .jwt .pem .X509CertUtils ;
4+ import org .apache .commons .codec .binary .Base64 ;
35import org .junit .Test ;
46
7+ import java .io .File ;
8+ import java .nio .file .Files ;
59import java .security .PublicKey ;
610import java .security .SignatureException ;
11+ import java .security .cert .X509Certificate ;
12+ import java .util .HashMap ;
13+ import java .util .Map ;
714
815import static com .auth0 .jwt .pem .PemReader .readPublicKey ;
916import static junit .framework .TestCase .assertNotNull ;
1320 */
1421public class JWTVerifierRsa256Test {
1522
16- public final static String RESOURCES_DIR = "src/test/resources/auth0-pem/" ;
17- public final static String MISMATCHED_RESOURCES_DIR = "src/test/resources/test-pem/" ;
18- public final static String PUBLIC_KEY_PEM_FILENAME = "key.pem" ;
19- public final static String MISMATCHED_PUBLIC_KEY_PEM_FILENAME = "test-auth0.pem" ;
23+ private final static String RESOURCES_DIR = "src/test/resources/auth0-pem/" ;
24+ private final static String MISMATCHED_RESOURCES_DIR = "src/test/resources/test-pem/" ;
25+ private final static String PUBLIC_KEY_PEM_FILENAME = "key.pem" ;
26+ private final static String MISMATCHED_PUBLIC_KEY_PEM_FILENAME = "test-auth0.pem" ;
2027
2128
2229
@@ -67,7 +74,7 @@ public void shouldFailOnInvalidJWTTokenSignature() throws Exception {
6774
6875 /**
6976 * Here we modify the payload section on an otherwise legal JWT Token and check verification using the correct Public Key and
70- * unaltered JWT signnature (which now doesn't match the payload) fails
77+ * unaltered JWT signature (which now doesn't match the payload) fails
7178 */
7279 @ Test (expected = SignatureException .class )
7380 public void shouldFailOnInvalidJWTTokenPayload () throws Exception {
@@ -81,5 +88,19 @@ public void shouldFailOnInvalidJWTTokenPayload() throws Exception {
8188 new JWTVerifier (publicKey , "audience" ).verifySignature (token .split ("\\ ." ), Algorithm .RS256 );
8289 }
8390
91+ @ Test (expected = IllegalStateException .class )
92+ public void shouldFailWithJwtThaHasTamperedAlgorithm () throws Exception {
93+ final File file = new File (RESOURCES_DIR + PUBLIC_KEY_PEM_FILENAME );
94+ final byte [] data = Files .readAllBytes (file .toPath ());
95+ JWTSigner signer = new JWTSigner (data );
96+ Map <String , Object > claims = new HashMap <>();
97+ claims .put ("sub" , "userid" );
98+ JWTSigner .Options options = new JWTSigner .Options ();
99+ options .setAlgorithm (Algorithm .HS256 );
100+ String jwt = signer .sign (claims , options );
101+ new JWTVerifier (data ).verify (jwt );
102+ final PublicKey publicKey = readPublicKey (RESOURCES_DIR + PUBLIC_KEY_PEM_FILENAME );
103+ new JWTVerifier (publicKey ).verify (jwt );
104+ }
84105}
85106
0 commit comments