3
respuestas

Error 403 Forbiden

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadAlguien me puede ayudar, crei que con las notas del profesor solucionaría mis dudas, pero no encontré el error

3 respuestas

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.

  1. 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.

  2. 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.

  3. 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!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios

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