본문 바로가기

개발 이론/Spring Security9

AccessToken과 RefreshToken 조금더 자세하게 이전에 AccessToken과 RefreshToken에 대해서 블로그를 쓴적이 있지만 자세하게 쓰지 않은 것같아서.. 거기다가 부트캠프 멘토님이 토큰에 대해서 질문하시는데 머리로 어버법하다가 끝났다....ㅎㅎ 세션 기반 인증과 토큰 기반의 인증 차이점 세션 기반 인증과 토큰 기반 인증에 대해서 설명하기 이전에 HTTP에 대해 간단하게 이야기 해보자. HTTP는 stateless라는 특징이 있다. 즉 각 요청이 이전에 수행된 작업을 전혀 인식하기 못한다. 쉽게 이야기 하자면 내가 로그인하고 다른 페이지로 이동했을때 HTTP동작은 우리가 아까 로그인했는지 모른다. 그렇다면 사용자의 아이디와 비밀번호를 브라우저에 저장해놓고 매 요청마다 그 정보를 보내야할까?? 안된다. 일단 민감한 데이터가 클라이언트에 저장되.. 2023. 12. 30.
[Spring Security] AccessToken과 RefreshToken 개인 프로젝트에 AccessToken이랑 RefreshToken을 아무 생각없이 도입하다 문득 생각이 들었다. 나는 왜 Refresh Token을 rdb에 저장했을까?? 만약 로그아웃 했는데 AccessToken이 유효기간이 살아있는 채로 탈취당했다면 어쩌야하는 거지?? 만약 RefreshToken 탈취는...?? 아 기능 하나 중심으로 이렇게 많은 궁금증이 생기다니... 이거 찾다보니 2시간 뚝딱이었다. 나의 밑거름이 되리라 믿고 지금까지 찾아본 결과와 생각을 정리해본다 RefreshToken은 왜 도입했나?? 나의 경우 JWT토큰을 accesstoken으로 하여 인증 인가 서비스를 구현했다. 토큰을 client에게 보내주면 클라이어트에서는 요청의 Authorization헤더에 토큰을 담아서 서버로 보.. 2023. 11. 26.
[Spring Security] 필터로 처리??인터셉터로 처리?? 스프링 시큐리티 공부할때도 내가 아는 서블릿 필터가 시큐리티가 사용하는 필터가 맞나?? 라는 생각이 들었다. 그래서 일단 시큐리티의 필터도 서블릿 필터의 일종이다. 근데 필터가 뭐였지..?에서 시작해서 인터셉터라는 개념도 있던거 같은데... 하면서 공부해보니 의문이 들었다. 왜 스프링 시큐리티 필터로 로그인 처리를 할까?? 인터셉터도 있는데...?? 결론부터 말하자면 처리를 하는 위치??가 다르다. 사실 인터셉터로 구현하든, 스프링 시큐리티로 구현하든 그건 회사의 분위기나 개발자들의 선호도에 따라 다르다고 한다. 뭐가 나쁘다,좋다라는 그런건 없는 것같다. 그래서 일단 필터와 인터셉터에 대해서 간단하게 얘기해보자 필터 필터의 흐름은 Http 요청 -> was -> 필터 -> 서블릿 -> 컨트롤러 이다. 즉.. 2023. 11. 16.
[Spring Security] 권한 부여 : 제한 적용 권한 부여 구성을 적용할 요청을 선택하는데는 선택기 메서드를 사용한다. 스프링 시큐리티에는 세 유형의 선택기 메서드가 있다 mvc 선택기 : 경로에 mvc식을 이용해 엔드포인트를 선택 앤트 선택기 : 경로에 앤트 식을 이용해 엔드포인트를 선택 정규식 선택기 : 경로 정규식을 이용해 엔드포인트를 선택 일단 선택기 메서드에 대해서 알아보자 간단하게 예제를 들자면 @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Hello!"; } @GetMapping("/ciao") public String ciao() { return "Ciao!"; } @GetMapping("/hola") p.. 2023. 11. 12.
[Spring Security] 권한 부여 구성 : 액세스 앞에 얘기한 스프링 시큐리티는 회원가입할때 비밀번호 해시화, 로그인시 비밀번호 확인하고 토큰 지급 까지의 과정이다. 이제는 인증이 완료된후 사용자 세부정보가 보안 컨텍스트에 저장된후 요청이 권한 부여 필터로 위임되어 어떤 단계를 걸치는지 알아볼 것이다. 간단하게 얘기하자면 권한 부여 필터가 요청을 허용할지 결정하고 권한이 부여되며 요청이 컨트롤러로 전달된다 앞의 UserDetails 구현한 클래스를 보면 Collections 2023. 11. 10.
[Spring Security] UserDetails, UserDetailsService, PasswordEncoder, AuthenticationProvider로 간단 예제 간단하게 앞에 배웠던 내용을 정리해보자 AuthenticationFilter는 요청을 가로채서 인증 책임을 AuthennticationManager에 위임하여 AuthenticationManager는 AuthenticationProvider를 이용해 요청을 인증한다 여기서 AuthenticationProvider는 UserDetailService와 PasswordEncdoer를 호출해 암호를 검증하는 인증논리를 정의한다 이후 반환된 성공한 인증 호출의 세부정보는 AuthenticationFilter에 의해 SecurityContext에 저장된다 간단한 예제에서는 bcryt 및 scrypt로 해시된 암호를 검사하고 formLogin 인증방법으로 구성할 것이다 @Entity public class User .. 2023. 11. 8.
728x90