본문 바로가기

전체 글

(46)
API 명세서 IndexMethodURIDescription1POST/api/main/signup/dupl/{email}이메일 중복 확인2POST/api/main/signup회원 가입3GET/api/main/weather날씨 정보 조회 POST/api/main/reissue토큰 재발행 POST/api/outfit/write옷차림 리뷰 작성 GET/api/main/outfits모든 옷차림 리뷰 조회 PATCH/api/outfit/{outfitId}리뷰 삭제 GET/api/outfit/history내 리뷰 전체 조회 GET/api/outfit/items옷 종류 조회(리뷰 작성시) POST/api/main/login로그인 POST/api/account/logout로그아웃(CustomLogoutFilter) GET/api/a..
Axios Interceptors 1. Access Token (액세스 토큰) - 로컬 스토리지에 저장역할: Access Token은 사용자가 인증된 상태임을 증명하며, 서버와의 대부분의 요청에서 사용됩니다. 이 토큰은 짧은 유효 기간을 가지며, 만료되면 새로운 Access Token을 발급받아야 합니다.저장 위치: 로컬 스토리지(Local Storage).이유: 로컬 스토리지에 저장하면 클라이언트 애플리케이션이 쉽게 접근할 수 있으며, 페이지를 새로고침해도 유지됩니다.보안 고려: 로컬 스토리지에 저장된 토큰은 XSS(크로스 사이트 스크립팅) 공격에 노출될 수 있으므로, 로컬 스토리지 사용 시 애플리케이션에서 XSS 공격 방지에 주의를 기울여야 합니다.2. Refresh Token (리프레시 토큰) - 쿠키에 저장역할: Refresh T..
로그아웃 (CustomLogoutFilter) 로그아웃 기능로그아웃 버튼 클릭시프론트엔드측: 로컬 스토리지에 존재하는 Access 토큰 삭제 및 Axios Api Client를 이용해서 서버측 로그아웃 경로로 Refresh 토큰 전송백엔드측: 로그아웃 로직을 추가하여 Refresh 토큰을 받아 쿠키 초기화(null) 후 Refresh DB에서 해당 Refresh 토큰을 삭제 (모든 계정에서 로그아웃 구현시 username 기반으로 모든 Refresh 토큰 삭제) 백엔드에서 로그아웃 수행 작업DB에 저장하고 있는 Refresh 토큰 삭제Refresh 토큰 쿠키 null로 변경 public class CustomLogoutFilter extends GenericFilterBean { private final JWTUtil jwtUtil; pr..
Refresh Token 로그인이 성공하면 기존에 단일 토큰만 발급했지만 Access/Refresh에 해당하는 다중 토큰을 발급하고자 한다.... 화이팅 따라서 로그인이 성공한 이후 실행되는 successfulAuthentication() 메서드에서 2개의 토큰을 발급한다.  이때 각각의 토큰은 생명주기와 사용처가 다르기 때문에 서로 다른 저장소에 발급한다.Access : 헤더에 발급 후 프론트에서 로컬 스토리지에 저장Refresh : 쿠키에 발급 로그인 성공 핸들러 - Accress/Refresh Token@Overrideprotected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain,..
LoginFilter, JWTFilter, Spring Security 인증 과정 LoginFilterLoginFilter는 사용자가 로그인할 때 작동한다.사용자가 이메일과 비밀번호를 입력하여 로그인 요청을 하면 attemptAuthentication 메서드가 호출되어 인증을 시도한다.인증이 성공하면 successfulAuthentication 메서드가 호출되어 JWT 토큰이 생성되고 Authorization 헤더에 포함되어 응답으로 반환된다. JWTFilterJWTFilter는 모든 요청에 대해 JWT 토큰을 검사한다.사용자가 로그인 후 다른 API 요청을 할 때, 요청 헤더에 포함된 JWT 토큰을 검증하여 유효성을 체크하고, 유효한 토큰일 경우 사용자 정보를 설정하여 Spring Security Context에 저장한다.JWTFilter는 로그인 과정과는 무관하게 동작하며, 로그인..
SecurityConfig 수정 전/후 강의를 통해 배운 코드 (https://www.youtube.com/watch?v=3Ff7UHGG3t8&list=PLJkjrxxiBSFCcOjy0AAVGNtIa08VLk1EJ&index=7&t=2s)@Configuration@EnableWebSecuritypublic class SecurityConfig { //AuthenticationManager가 인자로 받을 AuthenticationConfiguraion 객체 생성자 주입 private final AuthenticationConfiguration authenticationConfiguration; public SecurityConfig(AuthenticationConfiguration authenticationConfiguration) {..
JWT Token + Spring Security 현재 프로젝트는 0.11.5 버전 사용강의는 0.12.3 버전 사용dependencies { implementation 'io.jsonwebtoken:jjwt-api:0.12.3' implementation 'io.jsonwebtoken:jjwt-impl:0.12.3' implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'}   기본적인 SecurityConfig 클래스 @Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf((auth) -> auth.disable()); http .form..
401 Unauthorized Cookie에 있는 token을 가져오고 이를 JwtService에서 유효한지 검증하고자 할때 401 에러가 발생했다.HTTP 상태 중 401 에러는 클라이언트가 인증되지 않았거나, 유효한 인증 정보가 부족하여 요청이 거부되었음을 나타낸다. 이는 SecurityConfig에서는 HTTP 요청이 인증 없이 허용되도록 되어 있지만,특정 엔드포인트에 대해 Jwt 토큰을 확인하도록 구현되어있기 때문이다. SecurityFilterChain에 특정 경로에 대해 인증을 요구하도록 수정하였더니 에러가 해결되었다.  근데 특정 엔드포인트를 하나하나 다 해줘야하나?  1. 분리하거나  2. 통합하거나  해야할 듯  .... 403 에러 다시 발생ㅠ