2
2
3
3
import java .io .*;
4
4
import java .security .NoSuchAlgorithmException ;
5
+ import java .util .Objects ;
5
6
import java .util .Optional ;
6
7
import javax .crypto .KeyGenerator ;
7
8
import javax .servlet .http .*;
13
14
import com .auth0 .jwt .exceptions .JWTVerificationException ;
14
15
import com .auth0 .jwt .interfaces .DecodedJWT ;
15
16
16
- @ WebServlet (name = "Jwt " , value = "/Auth" )
17
+ @ WebServlet (name = "JwtTest1 " , value = "/Auth" )
17
18
public class auth0 extends HttpServlet {
18
19
19
- public void doPost (HttpServletRequest request , HttpServletResponse response ) {}
20
+ public void doPost (HttpServletRequest request , HttpServletResponse response ) throws IOException {
21
+ response .setContentType ("text/html" );
22
+ PrintWriter out = response .getWriter ();
23
+
24
+ // OK: first decode without signature verification
25
+ // and then verify with signature verification
26
+ String JwtToken1 = request .getParameter ("JWT1" );
27
+ String userName = decodeToken (JwtToken1 );
28
+ verifyToken (JwtToken1 , "A Securely generated Key" );
29
+ if (Objects .equals (userName , "Admin" )) {
30
+ out .println ("<html><body>" );
31
+ out .println ("<h1>" + "heyyy Admin" + "</h1>" );
32
+ out .println ("</body></html>" );
33
+ }
20
34
21
- final String JWT_KEY = "KEY" ;
35
+ out .println ("<html><body>" );
36
+ out .println ("<h1>" + "heyyy Nobody" + "</h1>" );
37
+ out .println ("</body></html>" );
38
+ }
22
39
23
40
public void doGet (HttpServletRequest request , HttpServletResponse response ) throws IOException {
41
+ response .setContentType ("text/html" );
42
+ PrintWriter out = response .getWriter ();
24
43
25
- // OK
26
- String JwtToken1 = request .getParameter ("JWT1 " );
27
- decodeToken (JwtToken1 );
28
- try {
29
- verifyToken ( JwtToken1 , getSecureRandomKey () );
30
- } catch ( NoSuchAlgorithmException e ) {
31
- throw new RuntimeException ( e );
44
+ // NOT OK: only decode, no verification
45
+ String JwtToken2 = request .getParameter ("JWT2 " );
46
+ String userName = decodeToken (JwtToken2 );
47
+ if ( Objects . equals ( userName , "Admin" )) {
48
+ out . println ( "<html><body>" );
49
+ out . println ( "<h1>" + "heyyy Admin" + "</h1>" );
50
+ out . println ( "</body></html>" );
32
51
}
33
52
34
- // only decode, no verification
35
- String JwtToken2 = request .getParameter ("JWT2" );
36
- decodeToken (JwtToken2 );
53
+ // OK: no clue of the use of unsafe decoded JWT return value
54
+ JwtToken2 = request .getParameter ("JWT2" );
55
+ JWT . decode (JwtToken2 );
37
56
38
57
39
- response . setContentType ( "text/ html" );
40
- PrintWriter out = response . getWriter ( );
41
- out .println ("<html><body>heyyy< /body></html>" );
58
+ out . println ( "< html><body> " );
59
+ out . println ( "<h1>" + "heyyy Nobody" + "</h1>" );
60
+ out .println ("</body></html>" );
42
61
}
43
62
44
63
public static boolean verifyToken (final String token , final String key ) {
@@ -52,8 +71,10 @@ public static boolean verifyToken(final String token, final String key) {
52
71
return false ;
53
72
}
54
73
74
+
55
75
public static String decodeToken (final String token ) {
56
76
DecodedJWT jwt = JWT .decode (token );
57
77
return Optional .of (jwt ).map (item -> item .getClaim ("userName" ).asString ()).orElse ("" );
58
78
}
79
+
59
80
}
0 commit comments