22
33import java .io .*;
44import java .security .NoSuchAlgorithmException ;
5+ import java .util .Objects ;
56import java .util .Optional ;
67import javax .crypto .KeyGenerator ;
78import javax .servlet .http .*;
1314import com .auth0 .jwt .exceptions .JWTVerificationException ;
1415import com .auth0 .jwt .interfaces .DecodedJWT ;
1516
16- @ WebServlet (name = "Jwt " , value = "/Auth" )
17+ @ WebServlet (name = "JwtTest1 " , value = "/Auth" )
1718public class auth0 extends HttpServlet {
1819
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+ }
2034
21- final String JWT_KEY = "KEY" ;
35+ out .println ("<html><body>" );
36+ out .println ("<h1>" + "heyyy Nobody" + "</h1>" );
37+ out .println ("</body></html>" );
38+ }
2239
2340 public void doGet (HttpServletRequest request , HttpServletResponse response ) throws IOException {
41+ response .setContentType ("text/html" );
42+ PrintWriter out = response .getWriter ();
2443
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>" );
3251 }
3352
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 );
3756
3857
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>" );
4261 }
4362
4463 public static boolean verifyToken (final String token , final String key ) {
@@ -52,8 +71,10 @@ public static boolean verifyToken(final String token, final String key) {
5271 return false ;
5372 }
5473
74+
5575 public static String decodeToken (final String token ) {
5676 DecodedJWT jwt = JWT .decode (token );
5777 return Optional .of (jwt ).map (item -> item .getClaim ("userName" ).asString ()).orElse ("" );
5878 }
79+
5980}
0 commit comments