무료
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링부트 시큐리티 & JWT 강의
구글 oauth 사용 중 궁금한 것.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 선생님의 시큐리티 강의 열심히 듣고있는 학생입니다! 다름이 아니라 시큐리티 oauth 설정 중 scope를 왜 처리하는 지 알고싶습니다.. scope 설정을 해야만 PrincipalOauth2UserService에 접근하여 이 함수를 리턴해주더라고용.. 설정을 안할 시에는 접근하지 못합니다..ㅠ혹시 무슨 이유인지 알 수 있을까요..?
- 미해결스프링부트 시큐리티 & JWT 강의
JWT방식에서 세션미사용
안녕하세요.강의중에 궁금사항이 있어서 질문드립니다. JWT방식으로 스프링시큐리티 진행중에 JwtAuthenticationFilter attemptAuthentication()에서 권한처리를 편하게하려고 return authentication; 하여 세션을 이용하셨습니다. 원래 JWT방식은 세션을 사용하지않아도된다고 하셨습니다.여기서 세션을 사용하지않으려면 return null로 하면될까요?return null로 하였더니 successfulAuthentication()가 실행되지않아 토큰 발행이 안되는데, 토큰발행부분을 attemptAuthentication()쪽으로 옮겨하는건지, 애초에 successfulAuthentication가 왜 실행되지않았는지 궁금합니다. return을 함으로써 authentication객체가 session영역에 저장된다고 설명하셨는데, session영역을 미사용하려면 어떻게 짜야하나요?
- 해결됨스프링부트 시큐리티 & JWT 강의
9강 구글 로그인 오류
시큐리티 9강 강의 중constructor using field 후 아래 같은 오류가 뜹니다. Description:The dependencies of some of the beans in the application context form a cycle:┌─────┐| securityConfig (field private com.example.demo.oauth.PrincipalOauth2UserService com.example.demo.config.SecurityConfig.principalOauth2UserService)↑ ↓| principalOauth2UserService (field private org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder com.example.demo.oauth.PrincipalOauth2UserService.bCyBCryptPasswordEncoder)└─────┘Action: Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.
- 미해결스프링부트 시큐리티 & JWT 강의
OAuth 이론
OAuth 이론은 이전강의에서 들으라고 하셨는데 어떤 강의를 말씀하시는 건가요 ?
- 미해결스프링부트 시큐리티 & JWT 강의
Facebook 로그인 버튼만든 후 error(Sorry...) 발생시
인증 및 계정 만들기 > 수정 에서 Email 권한 추가해주어야 오류 안나네요.
- 미해결스프링부트 시큐리티 & JWT 강의
실수로 google auth 시크릿 키를 깃에 업로드 했어요
업로드 하고 구글 메일로 시크릿키가 노출되었다고 메일이 와서 10분 내로 대시보드에 있는 프로젝트를 닫았는데, 30일 뒤에 닫힌다고 알람이 오고, 다시 대시보드를 보니까 사진과 같이 뜨던데 이후에 문제가 발생할까요...?ㅠㅠㅠㅠ
- 해결됨스프링부트 시큐리티 & JWT 강의
@EnableGlobalMethodSecurity(securedEnabled = true)
@EnableGlobalMethodSecurity(securedEnabled = true)만 작성해줘도 PreAuthorize 어노테이션이 잘 작동되는 것 같은데 securedEnabled랑 prePostEnabled 둘 중에 하나만 적어주면 되는 건가요?
- 미해결스프링부트 시큐리티 & JWT 강의
/loginForm?error가 발생하며 로그인이 안 됩니다.
4강을 수강하는 중에 생긴 오류입니다. 회원가입은 정상적으로 작동하는데 로그인을 하려고 하면 아래 사진처럼 오류가 발생합니다.강의를 여러번 돌려보며 코드는 똑같이 따라했고, 콘솔에 찍히는 것을 보면 제가 로그인 하고자 하는 username도 잘 찍힙니다. (회원 정보를 찾는 것까지는 정상적인 거 같습니다)import org.springframework.boot.web.servlet.view.MustacheViewResolver; // 이 import문에서 reactive로 하라고 하셨는데 그걸로 바꾸면 아래의 setCharset, setContentType 등에서 오류가 발생하여 servlet으로 하였습니다. import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ViewResolverRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void configureViewResolvers(ViewResolverRegistry registry) { MustacheViewResolver resolver = new MustacheViewResolver(); resolver.setCharset("UTF-8"); resolver.setContentType("text/html;charset=UTF-8"); resolver.setPrefix("classpath:/templates/"); resolver.setSuffix(".html"); registry.viewResolver(resolver); } }@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean public BCryptPasswordEncoder encodePwd(){ return new BCryptPasswordEncoder(); } @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable(); http.authorizeRequests() .antMatchers("/user/**").authenticated() .antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')") .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')") .anyRequest().permitAll() .and() .formLogin() .loginPage("/loginForm") .loginProcessingUrl("/login") .defaultSuccessUrl("/"); }
- 미해결스프링부트 시큐리티 & JWT 강의
스프링에서 설정 값 관리하는 방법 질문드립니다.
강사님 안녕하세요.스프링에서 토큰을 암호화, 복호화하기 위한 secret 키 값을 관리하는 방법을 알고 싶은데, 구글링해도 잘 나오지 않아 질문남깁니다. 스프링 부트에서는 .yml 파일 또는 .property 파일을 통해 설정값을 따로 관리하여 @value로 불러와서 사용하던데, 스프링에서는 어떤 파일을 통해 어떻게 사용할 수 있을까요?
- 미해결스프링부트 시큐리티 & JWT 강의
10강 시큐리티 로그인중 api 라이브 과정
처음에 기타가 아닌 걸로 했다가 다시 작성해봅니다.앱 라이브를 안할경우 페이스북 로그인시 뜨는 화면 라이브를 하려니 뜨는 에러개인정보처리방침 URL:https://www.facebook.com/privacy/policy/?entry_point=facebook_page_footer사용자 데이터 삭제 https://developers.facebook.com/docs/development/create-an-app/app-dashboard/data-deletion-callback 임의 작성 localhost:8080 에서 대충 www.naver.com으로 웹사이트 url 변경 앱 라이브 성공!! 일단 라이브 성공 상태에서 다시http://localhost:8080 로 웹사이트 url 변경 ??? 읭? 분명 비활성화에서 바뀌긴 했는데 페이스북 로그인이 안됨.. (개발자 계정과 다른 페북 아이디일경우) 개발자 페이스북 아이디 동일할경우. 여기까지 후 일단 페북 인증 잠정 중단.확인결과 비즈니스계정을 인증해야 api를 정상적으로 사용가능한데, 비즈니스계정 인증시 사업자 등록증 등 요구하는게 많아 포기.
- 미해결스프링부트 시큐리티 & JWT 강의
스프링 부트 시큐리티 6강-구글 로그인 준비
6강을 시작하면서 구글 클라우드 api 화면에서 새 프로젝트를 만들려고 여러 번 시도를 하였으나 만들어지지 않습니다.왜 그런 걸까요
- 미해결스프링부트 시큐리티 & JWT 강의
안녕하세요 강사님 질문있습니다.
만약 이 네이버 로그인까지 진행하고 로그인을 완료하면 index 페이지로 이동을 하는데,jwt토큰을 생성하려면 어떻게 해야 되나요?Service 에서 생성하고 적용하면 되는 건가요?
- 미해결스프링부트 시큐리티 & JWT 강의
커스텀 필터 적용 안됨
강의를 다 수강하고 깃허브 코드 참조하여 작성했습니다.현재 SecurityConfig 코드는 다음과 같습니다.@Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig{ private final UserRepository userRepository; private final CorsConfig corsConfig; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http .csrf(AbstractHttpConfigurer::disable) .sessionManagement((sessionManagement) -> sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS) ) .formLogin(withDefaults()) .httpBasic(withDefaults()) .apply(new MyCustomDsl()) .and() .authorizeRequests(requests -> requests .requestMatchers("/user/**").authenticated() .requestMatchers("/admin/**").access("hasAuthority('ADMIN')") .anyRequest().permitAll() ) .build(); } public class MyCustomDsl extends AbstractHttpConfigurer<MyCustomDsl, HttpSecurity> { @Override public void configure(HttpSecurity http) throws Exception { AuthenticationManager authenticationManager = http.getSharedObject(AuthenticationManager.class); http .addFilter(corsConfig.corsFilter()) .addFilter(new JwtAuthenticationFilter(authenticationManager)) .addFilter(new JwtAuthorizationFilter(authenticationManager, userRepository)); } } } filterchain에서 and()에 오류가 발생합니다.'and()' is deprecated and marked for removal 로 나오는데 and가 deprecated된 거 같지는 않고 커스텀 필터를 적용하는 것에서 뭔가 문제가 있지 않을까 싶습니다만 이틀째 해결을 못하고 있어 문의남깁니다ㅠㅠ
- 미해결스프링부트 시큐리티 & JWT 강의
스프링에서도 JWT 구현가능한가요? (스프링 부트X)
안녕하세요 강사님.스프링 환경에서 작업 진행 중에 JWT를 구현하고자 하는데, 강사님 수업도 마찬가지이며 구글링해봐도 정보들 대부분이 스프링 부트 환경에서 JWT 구현하는 내용들이라 궁금합니다.스프링 부트가 아닌 스프링 환경에서도 JWT 구현이 가능한가요?가능하다면 스프링 부트에서 구현하는 방식을 따라도 될까요?
- 해결됨스프링부트 시큐리티 & JWT 강의
시큐리티 2강 SecurityConfig 설정시 로그아웃 -로그인 납치증상
SecurityConfig 작성후 계속하여 로그아웃 시도시 로그인 화면으로 납치되어 정상적인 학습이 불가능합니다. --> 로그아웃 시도할경우 로그인 string 리턴
- 미해결스프링부트 시큐리티 & JWT 강의
사용자 정보 변경 시 jwt 재발급
안녕하세요. jwt를 사용하다가 jwt의 subject는 email, 그 외에 사용자의 닉네임과 같은 정보를 claims 에 넣었습니다. 그런데 이렇게 사용자의 정보가 변경될 때 특히 email이 변경될 때는 토큰을 재발급 받아줘야 사용 가능한 토큰이 되는데 만약 claims에 없는 비밀번호와 같은 보안과 관련된 정보를 변경했을 때는 새 토큰을 발급 받아도 사용자가 이전에 발급 받은 토큰으로 서비스에 접근할 때 어떻게 불가능한 토큰이라고 알 수 있는지 모르겠습니다. 토큰의 유효성을 검사하는 코드에서 db에서 사용자의 정보 수정일 이전 발행된 토큰이면 유효하지 않은 토큰이라고 하는 편이 나을지 고민입니다. 만약 이렇게 한다면 사용자의 정보를 수정할 때마다 새로운 토큰을 발급해줘야 된다는 점이 신경쓰입니다.Date date = Date.from(user.getModifiedDate().atZone(ZoneId.systemDefault()).toInstant()); // 토큰 발행일이 유저 데이터 수정일 이전이면 유효하지 않은 토큰임 if(claims.getBody().getIssuedAt().before(date)) { throw new CustomException(ErrorCode.VALIDATION_ERROR, "유효하지 않은 토큰입니다."); }매번 새로운 토큰을 발급받게 하는 게 좋은 방법일까요?
- 미해결스프링부트 시큐리티 & JWT 강의
안녕하세요 강사님 핸들러 질문있습니다
현재 제 상황은 이러합니다Oauth2Service에서 검증을 하고여기서 회원 생성을 할 수 있습니다. (현재는 빼놓은 상태)그리고 successhandler까지 구현했습니다.이 상태입니다.근데 저는 로그인을 성공했을 경우,핸들러를 타지 않고 8080:/ 주소로 이동합니다. 이러한 경우에 어떻게 토큰을 발급하고 적용할 수 있는지 모르겠습니다.apply로 정의한 함수때문에 핸들러를 거치지 않는 걸까요?apply로 정의한 함수는 강사님 JWT 강의랑 똑같습니다.
- 미해결스프링부트 시큐리티 & JWT 강의
스프링부트 시큐리티 3강 - 시큐리티 회원가입에서 USER출력
안녕하세요 강사님 객체 전달관련해서 질문이 있습니다. 강의에서 USER 객체를 출력했을 시,아래와 같이 객체 내부값이 출력되었는데,저는 `com.want.project.domain.user.domain.Users@6bfd8b8c`이런식으로 출력이 되네요..혹시 tostring을 오버라이딩하신걸까요??그리고 제 객체를 getter로 찍어보면 내부에 값이 아닌 null이 저장되어 있는데 이유가 무엇일까요?
- 미해결스프링부트 시큐리티 & JWT 강의
안녕하세요 강사님 /login 질문입니다.
제가 수업을 놓쳤는지 모르겠는데...시큐리티가 기본으로 /login을 캐치한다고 들었는데이 기본값을 바꿀 수 있는 방법이 존재하나요?/login으로 Post 요청을 보내면attemptAuthentication 메서드를 실행해서 로그인 하는 걸로 알고있는데/login 값을 제가 원하는 /api/login 처럼 변경할 수 있는지 궁금합니다.
- 미해결스프링부트 시큐리티 & JWT 강의
안녕하세요 강사님 로그인 질문있씁니다!
public class LoginFilter extends UsernamePasswordAuthenticationFilter이 작업을 통해서 login으로 들어오는 것을@Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { try { User user = objectMapper.readValue(request.getInputStream(), User.class); UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword()); return authenticationManager.authenticate(authenticationToken); } catch (IOException e) { log.error("{}", e); } return super.attemptAuthentication(request, response); }이 작업을 통해서 로그인 하는 걸로 알고있는데,이러한 경우에 컨트롤러 테스트 코드를 어떻게 작성할 수 있는 건지 궁금합니다. api가 아니라 자꾸 에러가 발생하는데혹시 이러한 경우에 api 테스트 코드 작성 팁좀 가르쳐주실 수 있나요? 이러한 예외가 발생합니다.이유를 모르겠습니다. Postman으로 할 때는 잘 동작합니다 ㅜㅜ그냥 /api/login 이라는 api를 생성해서 테스트해야 될까요?