Alguien me puede ayudar, crei que con las notas del profesor solucionaría mis dudas, pero no encontré el error
Alguien me puede ayudar, crei que con las notas del profesor solucionaría mis dudas, pero no encontré el error
Hola Angel,
¿Ha podido resolver el problema? El error 403 generalmente se refiere a un problema de autorización. Esto puede estar sucediendo porque el token JWT que estás generando para autenticar al usuario en la API no está siendo reconocido correctamente.
Revisa la lógica de tu código para generar el token JWT. Asegúrate de que estás siguiendo todos los pasos correctamente y que estás utilizando las librerías adecuadas.
Prueba tu API con un software de pruebas de API como Postman. Intenta autenticarte con un usuario y mira si recibes el token JWT correctamente.
Una vez que tengas el token, intenta hacer una solicitud a una ruta protegida de tu API con ese token. Asegúrate de que estás enviando el token en el encabezado de autorización de tu solicitud.
Espero que estos pasos te ayuden a solucionar tu problema. Si sigues teniendo problemas, por favor proporciona más detalles sobre tu implementación.
Mucho éxito en todo lo que te propongas y si tienes alguna duda aquí estaremos para apoyarte.
¡Vamos juntos!
Hola, no se me genera nada de la JWT Comparto el código que se modificó en esa aula:
package med.voll.api.infra.security;
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTCreationException;
import med.voll.api.domain.usuarios.Usuario;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
@Service
public class TokenService {
@Value("${api.security.token.secret}")
private String secret;
public String generarToken(Usuario usuario) {
try {
var algoritmo = Algorithm.HMAC256(secret);
return JWT.create()
.withIssuer("API Voll.med")
.withSubject(usuario.getLogin())
.withExpiresAt(fechaExpiracion())
.sign(algoritmo);
} catch (JWTCreationException exception){
throw new RuntimeException("error al generar el token jwt", exception);
}
}
private Instant fechaExpiracion() {
return LocalDateTime.now().plusHours(2).toInstant(ZoneOffset.of("-03:00"));
}
}
package med.voll.api.infra.security;
public record DatosJWTToken(String jwtToken) {
}
package med.voll.api.controller;
import jakarta.validation.Valid;
import med.voll.api.domain.usuarios.DatosAutenticacionUsuario;
import med.voll.api.domain.usuarios.Usuario;
import med.voll.api.infra.security.DatosJWTToken;
import med.voll.api.infra.security.TokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/login")
public class AutenticacionController {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private TokenService tokenService;
@PostMapping
public ResponseEntity autenticarUsuario(@RequestBody @Valid DatosAutenticacionUsuario datosAutenticacionUsuario){
Authentication authToken = new UsernamePasswordAuthenticationToken(datosAutenticacionUsuario.login(),
datosAutenticacionUsuario.clave());
var usuarioAutenticado = authenticationManager.authenticate(authToken);
var JWTToken = tokenService.generarToken((Usuario) usuarioAutenticado.getPrincipal());
return ResponseEntity.ok(new DatosJWTToken(JWTToken));
}
}
Tuve el mismo error luego se solucionó solo, pero volvió y no se que hacer XD