인프런 커뮤니티 질문&답변
스프링 시큐리티(JWT) 요청 관련 질문있습니다!
작성
·
23
0
안녕하세요! 강의 덕분에 스프링 개발에 잘 입문하게 됐고, 지금은 혼자서 프로젝트를 만들면서 실전에 적용해보고 있습니다!
다름이 아니라, JWT로 액세스/리프레시 토큰을 이용한 인증/인가를 구현하기 위해 구글링으로 스프링 시큐리티 관련 자료를 찾아보며 구현을 해나가고 있는데요!
필터 단에서 요청을 처리할 때 관련해 선택 장애가 생긴 부분이 있어서, 비록 스프링 시큐리티 관련 강의는 아니지만 관련해서(스프링 시큐리티 강의가 아직 없기도 해서요!) 질문드려보고자 글을 작성합니다!
모든 게시물 조회: GET /public/api/v1/posts/
로그인: GET /login
위와 같은 public 컨트롤러 요청 엔드포인트 URL이 있을 때, (스프링 시큐리티 Config에서 .authorizeHttpRequests(auth.requestMatchers.permitAll()로 설정한 URL일 때)
클라이언트가 보낸 HTTP 요청에
유효한 액세스 토큰을 포함됐을 때
유효하지 않은 액세스 토큰(만료된 액세스 토큰)이 포함됐을 때
액세스 토큰 생략됐을 때
위 세 경우 모두 정상적으로 요청을 처리해서 비즈니스 로직 실행 결과 데이터를 응답을 내려주는 게 맞는지, 아니면 public이라도(인증이 필요 없는 요청이라도 = 로그인하지 않아도 되는 요청이라도) 일단 클라이언트가 요청에
유효한 액세스 토큰 포함했을 때
유효하지 않은 액세스 토큰(만료된 액세스 토큰) 포함했을 때
위 경우들과 같이 액세스 토큰을 실어 보냈다는 것을 '클라이언트는 명시적으로 인증을 시도했다' 또는 '토큰이 있다는 것은 인증을 위한 것이다'라고 판단해서, public 요청이라도 토큰이 유효하지 않으면 에러 응답(ex. 토큰이 만료됐습니다)을 내려주는 게 맞는지 궁금합니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
손원희님, 질문 주셔서 감사합니다!
스프링 시큐리티에서 JWT를 이용한 인증/인가 구현에 대해 고민하고 계시는군요. 언급하신 시나리오에 따라 적절한 처리 방식을 결정하는 것이 중요합니다.
유효한 액세스 토큰 포함: 이 경우 요청이 정상적으로 처리되어야 하는 것이 맞습니다. 클라이언트가 유효한 인증 정보를 제공했으므로 비즈니스 로직을 수행하고 응답을 보내야 합니다.
유효하지 않은 액세스 토큰 포함: 명시적으로 인증 시도를 했음에도 불구하고 토큰이 유효하지 않다면, 응답으로 인증 실패를 알리는 것이 일반적인 방법입니다. 이는 클라이언트가 잘못된 인증 정보를 정정할 수 있도록 돕습니다.
액세스 토큰 생략:
permitAll()설정으로 보호되지 않는 리소스라면, 기본적으로 인증 없이 요청을 허용할 수 있습니다. 따라서 이 경우 일반적으로 요청을 정상 처리합니다. 하지만 특정 시나리오에서는 토큰의 유무를 통해 손님(게스트)와 인증된 사용자 구분 등 추가적인 처리가 필요할 수 있습니다.
결론적으로, 클라이언트가 요청에 JWT를 포함했다면 그것을 인증 시도로 간주하고, 유효하지 않은 경우에는 에러 응답을 주는 것이 일반적입니다. 이는 특히 보안 측면에서 올바른 사용을 유도하는 데 도움을 줄 수 있습니다.
더 자세한 내용은 Spring Security 프로젝트 페이지에서 확인하실 수 있습니다.
질문이 해결되었기를 바랍니다! 추가로 궁금한 사항 있으면 언제든지 말씀해 주세요.




