안녕하세요, 우선 좋은 강의 감사합니다. ^___^ 다름이 아니라 강의를 실습하는 중 문제가 생겨 한 가지 여쭙고 싶습니다! /api/authenticate 경로로 요청을 보내면 JwtFilter의 doFilter 로직을 타더라구요. 그래서 요청 헤더에 아무런 값이 없기 때문에 "유효한 JWT 토큰이 없습니다" 문장이 로그에 찍힙니다. SecurityConfig에 /api/authenticate 경로는 .permitAll() 을 해줬기 때문에 해당 doFilter 로직을 타면 안될 것 같은데, 혹시 제 생각이 맞는지 여쭤보고 싶습니다. 혹시 추가로... 강사님 깃허브 코드랑 비교해봐도 크게 다른점이 잘 안보이고.. 포스트맨으로 POST 요청까지 크게 다른 점을 모르겠는데.. 혹시 "유효한 JWT 토큰이 없습니다" 라고 뜨는 경우에 코드상에 살펴볼만한 포인트가 있을까요..? 감사합니다.
감이 잘 안와서 질문 올립니다. git@github.com:afgman4/jwt.git 27강 - jwt토큰 서버 구축완료 강의까지 다 봤는데.. 마지막 장에서 JwtAuthorizationFilter 에 디버깅을 걸고 해봤는데 중단점도 잘 걸리고.. principal에 값 세팅 잘되는 것도 확인이 되었습니다. @GetMapping ( "/api/v1/user" ) public String user (Authentication authentication){ PrincipalDetails principalDetails = (PrincipalDetails) authentication.getPrincipal() ; System. out .println(principalDetails.getUser()) ; return "user" ; } 부분에 중단점을 찍고 디버깅을 했는데 안타네요. /api/v1/user 로 하면 왜 body 에 1이라는 값이 박히는지 도통이해가 안갑니다. "user"라고 떠야 할거 같은데 말이죠..;; /api/v1/admin 하면 403 에러 잘 떠서 좋은데.. JwtAuthorizationFilter 에서 SecurityContext에 세팅을 하고 controller로 넘어와야 할거 같은데 안오는게 이상하네요 제 소스에 뭐가 잘못된게 있을까요?
Passport에서Refresh Token의 남은 유효기간에 따라서 기간이 얼마 남지 않으면 Refresh Token이 재발급(반대로 유효기간이 많이 남았다면 액세스토큰만 재발급)되게 하고 싶은데 너무 어렵네요, Express에서는 쉽게 가능했지만, Nest에서는 Strategy, Guard 등등에 맞춰서 개발하려다 보니 생각보다 제약이 좀 있어서 어렵네요.... 혹시 위와같은 예제같은건 없을까요? ㅠㅠ
안녕하세요 선생님, 항상 좋은 강의 감사드립니다. DI 관련해서 궁금한 점이 생겨 질문드립니다. Controller에서 Service 클래스를 DI 받을 때는 별도의 데코레이션 없이 DI를 받았는데, service 계층에서 repository를 DI 받을 때는 왜 @InjectRepository가 필요할까요? 개인적으로 생각해보기로는, 우리가 직접 만든 Service 클래스는 Nest IOC container에서 관리되지만, Repository 클래스는 TypeORM 모듈에 의해 DI가 관리되기 때문일 수도 있겠다는 생각을 해봤습니다.
기존질문 - security config에서 antMatchers.permitAll()이 작동하지 않는 것 같습니다. 찾아보니 csrf때문이란 말도 있어 csrf.disable사용해봐도 똑같이 계속 401에러가 뜹니다. ㅠ 왜 이러는 걸까요.. ++해결 config파일을 메인클래스와 같은 패키지안에 넣지않아서 bean을 인식하지 못하는 경우였습니다. 같은 패키지안에 넣으니 해결되었습니다!! 추가질문!!! 근데 추가적으로 왜 메인클래스안에 넣지않으면 인식이 되지않는 것인지 궁금합니다. 이게 스프링부트 작동순서와 연관된 것 인가요?
spring start에서 dependency넣지않고 나중에 따로 넣는다했을때 공식적으로 어떤 dependency를 써야한다고 적힌 문서는 어떻게 찾아야하나요? 구글에 spring security gradle dependency 등등 여러가지로 쳐봐도 공식문서를 못찾겠네요 ㅠ
안녕하세요. 좋은 강의 덕분에 JWT를 이용하여 로그인 기능을 구현하였습니다. 그 과정에서 토큰 만료기한을 짧게 설정하고 해당 사용자의 이벤트가 있을때마다 토큰 만료기한을 연장하여 사용자 관리를 하고 싶습니다. 그래서 JWT 인증 정보를 SecurityContext에 저장하기 전에 Claims에 만료 기한을 설정한 후 저장했는데 수정되지 않아서요. 제가 잘못된 방법인건지 혹은 다른 좋은 방법이 있을까요? 추가적으로 로그아웃 시 위의 방법이 됐을 경우 만료기한을 현재시점으로 하여 만료시키면 될까요? 답변 부탁드립니다.
안녕하세요. 선생님의 강의를 듣고 MSA에 JWT 기반 인증 인가 서비스를 구현 중입니다. 구현 중에 Auth Server를 분리하면서 다른 리소스 서버에서 @PreAuthorize로 메소드 단위 권한 인가를 구현하며 유추한 내용이 맞는지 확인차 질문 드립니다. 제가 생각한 @PreAuthorize의 동작 메커니즘은 아래와 같습니다. JwtFilter 클래스에서 Override하여 구현한 doFilter는 매 서블릿 요청마다 작동됩니다. 그리고 doFilter에서 UsernamePasswordAuthentication 객체를 SecurityContextHolder에 저장합니다. @PreAuthorize를 코멘트한 메소드에서는 SecurityContextHolder에 저장된 내용을 기반으로 권한을 체크합니다. 여기까지가 제가 유추한 내용인데요. 틀린 부분이 있으면 첨언 부탁드립니다. 그리고 위와 같은 방법 외에 MSA처럼 Auth Server를 분리한다던가 또는 ScaleOut된 서비스와 같이 분리된 아키텍처에서 권한인가하는 효율적인 방법이 또 있을까요?
안녕하세요 강의 잘들었습니다! springboot+thymeleaf 로 프로젝트를 하고 있는데 url 이동할때 jwt 토큰을 헤더에 유지시키는 방법이 궁금합니다. postman에서 전역변수로 토큰을 넣고 테스트하듯이 로그인을 유지하려면 헤더에 jwt값이 있어야하는데 예를 들어 user/mypage-> user/board 이런식으로 리다이렉트를하면서 헤더를 같이 보낼 수 있나요? 그게 안된다는거 같아서 화면전환할때 로그인 유지는 어떻게 시키는지 궁금합니다. 그래서 쿠키는 계속 헤더에 유지되길래 쿠키를 써야하나 생각중입니다. 비동기 식으로 ajax요청시에는 헤더에 토큰을 담아줄수 있는데 url전환시에는 로그인을 어떻게 유지시키는지 모르겠네요 미리 감사드려요
안녕하세요 질문을 둘러보았는데 저랑 딱맞는 고민은 없는거 같아서 질문드립니다. 프론트/백서버를 나누지 않고 한 서버로 구현할 경우 JWT를 페이지 이동시 매번 어떻게 헤더로 보내줄까요?? fetch api나 ajax를 통한 api 호출시 헤더 보내는것은 문제없지만 아예 다른 매핑으로 페이지를 이동할 경우 인증이 필요한 페이지에 접근하려면 header에 bearer token이 필요한데 도대체 어떤 방법으로 구현할지 모르겠습니다. 프론트서버를 나눈경우 이게 어려운게 아닌일 같은데 리다이렉션을 헤더요청과 함께하려는 꼴이 되서 안되는거 같네요,.. 그래서 일단은 cookie에 토큰값을 넣어주고 쿠키값에서 찾아오도록하고 있습니다..... 쿠키는 헤더에 자동으로 계속 추가되니깐요.. 그냥 이렇게 해도 상관없을까요 쿠키에 토큰 자체를 넣어버려도 괜찮을지요 프론트와 백이 분리 되지 않고 spring security로 설계한 서비스의 경우 jwt인증을 매 페이지 마다 어떻게 수행할지가 고민입니다. 감사합니다.
강의 너무 감사히 잘 듣고 있습니다. 강의를 들다 궁금한게 있어서 질문을 드립니다. 개인적으로 서버를 구축할떄 JWT가 간단하고 추가적으로 Redis server를 추가할 필요가 없어서 jwt를 선호합니다. 실무에서는 세션 vs JWT중 어떤것을 많이 쓰는지와 트랜드 혹은 선호되는 이유를 알 수 있을까요?
정말 너무 잘보고있습니다!! 짧지만 정말 좋았는데요...! 질문이 3개가 있습니다. 1. 이게 반환값으로 롬복 Setter가 적용된 User를 그대로 반환하고 JsonIgnore어노테이션을 붙여줬는데, 실제 프로젝트에서는 반환하는 DTO를 따로 만들고 롬복 셋터도 빼주고 빌더애들도 접근제한을 걸어주면 되는걸까요? 2. 그리고 jwt에러관련애들을 따로 패키지안에 만들어두고 각각 다른 implement를 했는데, RuntimeException을 구현(상속)받고 RestControllerAdvice로 한꺼번에 모아서 에러리스폰스를 보내줘도 되는거죠? 3. Validation에 메세지를 적었는데, 저는 json 바디에 담겨서 나올 줄 알았는데 애플리케이션 레벨에서 WARN 으로 나오는데, 서버에러 500뜨고 아무것도 안나오더라구요.. 어노테이션 메세지로 적어봤자 직접 에러객체를 만들어서 보내주지 않는 이상 Validation의 message=""는 서버개발자쪽만 보는 게 되는건가요? + 추가로 @RequestHeader를 이용하는것도 있으면 좋을것같아요! 그리고 mockMvc로 api테스트하는것과, 인텔리J의 httpRequest 파일을 활용하는 방법도있더라구요! 포스트맨처럼 환경변수 받아서 저장하는것도있구요 강의잘봤습니다