1. 사건의 발달도메인을 구매하기 전에는 AWS EC2의 IP를 사용하여 Swagger를 배포하였다. Swagger를 통해 서버로 요청을 보내게 되면, Swagger 주소와 서버 주소가 동일하기 때문에 CORS 문제를 고민할 필요가 없었다. 이젠 도메인을 구매하고 SSL 인증서를 발급받아 도메인 주소로 Swagger를 접속하도록 하였다. 그런데 GET 요청을 제외한 나머지 HTTP 메서드에 대해서 전부다 403 Invalid CORS request 오류가 발생하였다. 도메인에 맞춰서 Cors와 Swagger 설정을 했음에도 해결되지 않았다. 하루 내내 붙잡고 있어도 해결되지 않아, 게임으로 잠시 도피하고…. 다음날 처음부터 차근차근 해보니 해결책을 찾았다. 동일한 개발 환경에서 이 오류가 발생하는 사람이..
1. 내가 기대했던 결과사용자가 Authorization 헤더에 Bearer 타입의 Access Token을 담아서 서버로 요청한다.서버에서 Access Token을 받아서 만료된 토큰인지 검증한다.만료된 토큰이라면 ExpiredJwtException 예외를 발생시킨다.@ExceptionHandler를 사용하여 예외를 핸들링한다.JWT 토큰을 검증하는 FilterdoInternal()에서 사용자의 요청을 가로챈다.HttpServletRequest에서 1-1에서 담은 Access Token을 가져온다.try문에서 parseToken()를 호출한다.validateToken()를 통해 토큰을 검증한다.이때, 토큰이 만료되었는지 확인한다.토큰이 만료되었다면 ExpiredException 예외가 발생한다.try-..
1. 오류 발생 흐름1-1. 사용자가 로그인을 한다.로그인이 완료된 사용자의 인증 정보가 SecurityContext에 저장된다.1-2. 인증된 사용자가 HTTP 요청을 한다.인증이 완료된 사용자는 페이지를 이동하면서 HTTP 요청을 보낸다. 게시물 작성 페이지로 이동하기 위해서는 인증이 완료된 사용자이어야 하며, 더불어 작성 완료하기 위해서 또한 인증이 완료된 사용자이어야 한다.1-3. HTTP 요청 시에 인증된 사용자 정보를 가져올 수 없다.사용자가 게시물 작성 버튼을 누르면 인증 정보를 가져올 수 없다는 에러가 발생한다.아래 코드를 보면 createPost()의 매개변수에 @AuthenticationPrincipal 애너테이션을 사용하여 인증된 사용자 정보를 주입받고자 한다. 그러나 HTTP 요청이..
Security Filters역할요청된 정보를 가지고 UsernamePasswordAuthenticationToken 생성생성된 Token을 AuthenticationManager로 전달인증이 완료된 Authentication 객체를 Security Context에 저장" data-ke-type="html">HTML 삽입미리보기할 수 없는 소스사용자가 username, password를 입력 후 로그인을 시도하면 Security Filter가 입력 정보를 가로챕니다. 가로챈 username과 password는 UsernamePasswordAuthenticationToken에 저장됩니다.Authentication Manager역할여러 개의 구현체인 Authentication Providers를 가진다.사용..
인코딩, 암호화, 해싱은 모두 데이터 보안을 위한 기법이지만 각기 다른 목적과 방식을 갖습니다. 애플리케이션에서는 사용자의 비밀번호를 그대로 저장하는 것이 아닌 해싱을 거친 후에 저장합니다. 셋 다 데이터 보안을 위한 기법이라면 인코딩과 암호화를 사용하여 비밀번호를 저장해도 될 것 같은데 그러면 안 되는 이유에 대해서도 알아보겠습니다. 인코딩인코딩의 목적은 데이터를 다른 형식으로 변환하여 표현하는 것입니다. 이는 데이터를 저장하거나 전송할 때 형식을 표준화하거나 압축하는 등의 용도로 사용됩니다. 즉, 누군가를 못 알아보게 하는 목적이 아닌 사용성을 위해 사용되는 방식입니다. 예를 들어, 이미지를 인코딩하면 데이터를 효율적으로 전송할 수 있습니다. 이미지의 사이즈가 크기 때문에 이를 인코딩을 하여 압축하면..