Tengo un token jwt que recuperé de cognito después de que mi usuario inicie sesión.
Tengo un punto final de api específico en mi aplicación y quiero que solo los usuarios con un jwt válido puedan acceder a este punto final. Intenté mirar varios recursos en la web pero no pude entender nada. Soy nuevo en el concepto jwt.
PD: tengo una aplicación Java (spring boot). Realmente agradecería que alguien describiera en detalle los pasos que debo seguir para verificar mi jwt. Proporcione el código si es posible.
@CrossOrigin @RequestMapping(value= "/login", method=RequestMethod.POST,consumes="application/json") @ResponseBody public String authenticate(@RequestBody SignInDTO signInDetails) { //boolean isAuthenticated=false; CognitoHelper cognitoHelper=new CognitoHelper(); String authResult=cognitoHelper.ValidateUser(signInDetails.getEmailId(), signInDetails.getPassword()); ..... ..... .....authResult es el jwt que obtengo de cognito. Después de esto, no tengo ni idea de lo que hay que hacer.
Spring Security 5.1 introdujo soporte para esto, por lo que es mucho más fácil de implementar. Consulte https://docs.spring.io/spring-security/site/docs/current/reference/html/jc.html#oauth2resourceserver
Básicamente:
https://cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>Use una biblioteca como java-jwt (supongo que está usando Maven)
<dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.3.0</version> </dependency>Entonces:
String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXUyJ9.eyJpc3MiOiJhdXRoMCJ9.AbIJTDMFc7yUa5MhvcP03nJPyCPzZtQcGEp-zWfOkEE"; try { Algorithm algorithm = Algorithm.HMAC256("secret"); // or Algorithm algorithm = Algorithm.RSA256(publicKey, privateKey); JWTVerifier verifier = JWT.require(algorithm) .withIssuer("auth0") .build(); //Reusable verifier instance DecodedJWT jwt = verifier.verify(token); } catch (UnsupportedEncodingException exception){ //UTF-8 encoding not supported } catch (JWTVerificationException exception){ //Invalid signature/claims } Puede decodificar manualmente un jwt-token aquí: https://jwt.io
Más información sobre java-jwt aquí: https://github.com/auth0/java-jwt
Paso 1: Confirme la estructura del JWT
Paso 2: validar la firma JWT
Paso 3: Verificar las reclamaciones
Vaya a https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html para obtener más información.