Spring security
-
이전 포스트에서 auth-token을 이용한 인증 처리에 대해서 살펴보았다. 이번 포스트에서는 refresh token이라는 개념에 대해서 살펴보자. jwt auth token의 문제점과 보완 jwt auth token의 문제점JWT는 세션을 사용할 수 없는 REST 환경에서 세션 처럼 인증 정보를 유지하기 위해서 사용된다. 세션의 경우는 사용자의 활동에 따라서 유효 기간이 연장되지만 토큰의 경우는 만들어진 시점에 이미 유통 기한이 정해져있다. 토큰은 유효기간이 자체적으로 연장되지는 않는다. 따라서 장기간 사용해야 하는 경우는 번거로움이 발생할 수 있다.그럼 대안으로는 유효기간을 길~~게 가져갈 수 있다. 하지만 이때의 문제는 해커에 의한 토큰 탈취이다. 요청때마다 클라이언트에서 서버로 전송되는 이 토..
[JWT] Refresh 토큰 개념이전 포스트에서 auth-token을 이용한 인증 처리에 대해서 살펴보았다. 이번 포스트에서는 refresh token이라는 개념에 대해서 살펴보자. jwt auth token의 문제점과 보완 jwt auth token의 문제점JWT는 세션을 사용할 수 없는 REST 환경에서 세션 처럼 인증 정보를 유지하기 위해서 사용된다. 세션의 경우는 사용자의 활동에 따라서 유효 기간이 연장되지만 토큰의 경우는 만들어진 시점에 이미 유통 기한이 정해져있다. 토큰은 유효기간이 자체적으로 연장되지는 않는다. 따라서 장기간 사용해야 하는 경우는 번거로움이 발생할 수 있다.그럼 대안으로는 유효기간을 길~~게 가져갈 수 있다. 하지만 이때의 문제는 해커에 의한 토큰 탈취이다. 요청때마다 클라이언트에서 서버로 전송되는 이 토..
2024.12.02 -
이번 시간에는 JWT를 Spring Security에서 사용하기 위해 필요한 내용들을 작성해보자. 필터 작성 Spring의 FilterSpring Security는 전반적으로 Filter 기반으로 동작하기 때문에 적절한 Filter를 구성해서 JWT를 사용하는 것이 가장 권장된다.Spring에서 Filter를 만들 때는 통상 OncePerRequestFilter를 상속받아서 구현한다. OncePerRequestFilter는 forward나 include를 포함하는 요청 처리 과정에서 딱 1번만 처리되는 것이 보장되는 필터이다. 이 클래스에는 doFilterInternal과 shouldNotFilter메서드가 제공되므로 필요한 기능을 여기에 제공하면 된다.@RequiredArgsConstructor..
[JWT]JWT를 위한 Spring Security 설정이번 시간에는 JWT를 Spring Security에서 사용하기 위해 필요한 내용들을 작성해보자. 필터 작성 Spring의 FilterSpring Security는 전반적으로 Filter 기반으로 동작하기 때문에 적절한 Filter를 구성해서 JWT를 사용하는 것이 가장 권장된다.Spring에서 Filter를 만들 때는 통상 OncePerRequestFilter를 상속받아서 구현한다. OncePerRequestFilter는 forward나 include를 포함하는 요청 처리 과정에서 딱 1번만 처리되는 것이 보장되는 필터이다. 이 클래스에는 doFilterInternal과 shouldNotFilter메서드가 제공되므로 필요한 기능을 여기에 제공하면 된다.@RequiredArgsConstructor..
2024.12.02 -
이제 스프링 Boot에서 JWT를 사용해서 토큰을 생성하는 방법에 대해서 알아보자. 프로젝트 구성 의존성JWT를 자바에서 사용하기 위해서는 여러가지 라이브러리가 있는데 여기서는 jjwt라는 녀석을 사용해보자. 이를 위해 다음의 의존성을 추가한다. 이 녀석의 역할은 토큰은 base64로 인코딩 하거나 signature를 만들고 검증하는 역할등을 수행한다. io.jsonwebtoken jjwt-api 0.12.6 io.jsonwebtoken jjwt-impl 0.12.6 runtime io.jsonwebtoken jjwt-jackson 0.12.6 runtime application.ymlapplication.properties에는 사용자 정의 속..
[JWT]프로젝트 구성 및 토큰 확인이제 스프링 Boot에서 JWT를 사용해서 토큰을 생성하는 방법에 대해서 알아보자. 프로젝트 구성 의존성JWT를 자바에서 사용하기 위해서는 여러가지 라이브러리가 있는데 여기서는 jjwt라는 녀석을 사용해보자. 이를 위해 다음의 의존성을 추가한다. 이 녀석의 역할은 토큰은 base64로 인코딩 하거나 signature를 만들고 검증하는 역할등을 수행한다. io.jsonwebtoken jjwt-api 0.12.6 io.jsonwebtoken jjwt-impl 0.12.6 runtime io.jsonwebtoken jjwt-jackson 0.12.6 runtime application.ymlapplication.properties에는 사용자 정의 속..
2024.11.26 -
이번 포스트에서는 JWT의 개념과 기본 동작에 대해 살펴보자. Session Cookie와 JWT를 통한 인증의 차이 Session Cookie 활용session cookie는 전통적인 server의 인증 방식이다.클라이언트가 id/pass를 가지고 서버로 로그인 요청을 한다. 서버는 db server를 이용해 해당 사용자가 valid한지 점검하고 결과를 반환한다.로그인 성공 시 서버는 session store에 세션 공간을 할당하고 이 공간에 접근할 수 있도록 session cookie를 response로 내려보낸다.작업을 요청할 때 client는 session cookie를 request에 포함시켜 서버로 전송한다.서버는 이 cookie 값으로 로그인한 적이 있는지 session store에 확인..
[JWT]JWT 개요이번 포스트에서는 JWT의 개념과 기본 동작에 대해 살펴보자. Session Cookie와 JWT를 통한 인증의 차이 Session Cookie 활용session cookie는 전통적인 server의 인증 방식이다.클라이언트가 id/pass를 가지고 서버로 로그인 요청을 한다. 서버는 db server를 이용해 해당 사용자가 valid한지 점검하고 결과를 반환한다.로그인 성공 시 서버는 session store에 세션 공간을 할당하고 이 공간에 접근할 수 있도록 session cookie를 response로 내려보낸다.작업을 요청할 때 client는 session cookie를 request에 포함시켜 서버로 전송한다.서버는 이 cookie 값으로 로그인한 적이 있는지 session store에 확인..
2024.11.25 -
이번 포스트에서는 @Controller에서 Spring Security 사용에 대해 알아보자.Controller에서의 Spring Security UserDetails 활용Controller의 handler method에서 UserDetails를 파라미터로 받아서 활용할 수 있다. 이때 파라미터에는 @AuthenticationPrincipal 이라는 애너테이션이 선언되어 있어야 한다. 따라서 로그인 사용자 정보를 찾아서 더이상 직접 HttpSession을 사용하지 않아도 된다.@GetMapping({"/", "/index"})public String home(Model model, HttpSession session, @AuthenticationP..
12. Controller에서의 Security이번 포스트에서는 @Controller에서 Spring Security 사용에 대해 알아보자.Controller에서의 Spring Security UserDetails 활용Controller의 handler method에서 UserDetails를 파라미터로 받아서 활용할 수 있다. 이때 파라미터에는 @AuthenticationPrincipal 이라는 애너테이션이 선언되어 있어야 한다. 따라서 로그인 사용자 정보를 찾아서 더이상 직접 HttpSession을 사용하지 않아도 된다.@GetMapping({"/", "/index"})public String home(Model model, HttpSession session, @AuthenticationP..
2022.11.22 -
이번 포스트에서는 RememberMe 서비스에 대해 살펴보자.Remember-Me 처리Remember-Me는 로그인 정보를 쿠키에 저장해 두었다가 나중에 사용하는 기법이다. 쿠키를 안전하게 사용하려면 암호화해야 하고 로그아웃 할 때 쿠키 삭제 등 관리가 필요한데 Spring Security에서는 이 과정을 아주 단순히 처리할 수 있다.Remember-Me 기능을 이용하기 위해서는 화면단에 단지 remember-me라는 이름의 checkbox가 추가되면 된다.{{^SPRING_SECURITY_CONTEXT}} {{>include/csrf}} 아이디: 비밀번호: 로그인 유지: 로그인{{/SPRING_SECURITY_CONTEXT}} HttpSecurity 설..
11. RememberMe 서비스이번 포스트에서는 RememberMe 서비스에 대해 살펴보자.Remember-Me 처리Remember-Me는 로그인 정보를 쿠키에 저장해 두었다가 나중에 사용하는 기법이다. 쿠키를 안전하게 사용하려면 암호화해야 하고 로그아웃 할 때 쿠키 삭제 등 관리가 필요한데 Spring Security에서는 이 과정을 아주 단순히 처리할 수 있다.Remember-Me 기능을 이용하기 위해서는 화면단에 단지 remember-me라는 이름의 checkbox가 추가되면 된다.{{^SPRING_SECURITY_CONTEXT}} {{>include/csrf}} 아이디: 비밀번호: 로그인 유지: 로그인{{/SPRING_SECURITY_CONTEXT}} HttpSecurity 설..
2022.11.22 -
이번 포스트에서는 대표적인 보안 공격 중 하나인 CSRF(Cross Site Request Forgery)의 대책에 대해 살펴보자. CSRF 대책 CSRF?CSRF(Cross Site Request Forgery: 크로스 사이트 요청 위조)란 웹에서 행해지는 대표적인 해커의 공격 유형 중 하나이다. 다음 이미지는 어떻게 CSRF 공격이 일어나는지 보여준다. www.fictitiousbank.com의 고객인 bob은 정상 은행 사이트에 로그인 하고 정상적인 쿠키가 발행된다.우리의 희생자 Bob은 "저리에 돈을 빌려준다"는 혹하는 이메일을 받고 첨부된 이미지를 클릭한다.하지만 그 이미지의 경로에는 공격자에게 이체하는 동작이 연결되어있었다. ㅜㅜ이제 Bob의 이체 동작은 쿠키를 타고 www.fictitiou..
10. CSRF 처리이번 포스트에서는 대표적인 보안 공격 중 하나인 CSRF(Cross Site Request Forgery)의 대책에 대해 살펴보자. CSRF 대책 CSRF?CSRF(Cross Site Request Forgery: 크로스 사이트 요청 위조)란 웹에서 행해지는 대표적인 해커의 공격 유형 중 하나이다. 다음 이미지는 어떻게 CSRF 공격이 일어나는지 보여준다. www.fictitiousbank.com의 고객인 bob은 정상 은행 사이트에 로그인 하고 정상적인 쿠키가 발행된다.우리의 희생자 Bob은 "저리에 돈을 빌려준다"는 혹하는 이메일을 받고 첨부된 이미지를 클릭한다.하지만 그 이미지의 경로에는 공격자에게 이체하는 동작이 연결되어있었다. ㅜㅜ이제 Bob의 이체 동작은 쿠키를 타고 www.fictitiou..
2022.11.22 -
이번 포스트에서는 UserDetails와 UserDetailsService의 커스터마이징 필요와 방법에 대해 살펴보자. UserDetails 커스터마이징 기본 UserDetails의 문제점이제 로그인/로그아웃 관리 및 secured resource에 대한 접근 관리를 spring security가 처리해주니 훨씬 더 비지니스 로직에 집중할 수 있게 되었다.하지만 여전히 아쉬움이 남는데 바로 사용자 계정 정보를 담고있는 UserDetails에는 단지 사용자의 아이디와 비밀번호, role 정보등 만 담긴다는 점이다. 결과적으로 로그인에 성공했을 때 "admin 님 반갑습니다."의 형태로만 정보를 출력할 수 있다. ID 보다는 이름을 활용하여 "관리자님 반갑습니다."의 형태가 훨씬 부드럽지만 기본 UserDe..
09. UserDetails와 UserDetailsService 커스터마이징이번 포스트에서는 UserDetails와 UserDetailsService의 커스터마이징 필요와 방법에 대해 살펴보자. UserDetails 커스터마이징 기본 UserDetails의 문제점이제 로그인/로그아웃 관리 및 secured resource에 대한 접근 관리를 spring security가 처리해주니 훨씬 더 비지니스 로직에 집중할 수 있게 되었다.하지만 여전히 아쉬움이 남는데 바로 사용자 계정 정보를 담고있는 UserDetails에는 단지 사용자의 아이디와 비밀번호, role 정보등 만 담긴다는 점이다. 결과적으로 로그인에 성공했을 때 "admin 님 반갑습니다."의 형태로만 정보를 출력할 수 있다. ID 보다는 이름을 활용하여 "관리자님 반갑습니다."의 형태가 훨씬 부드럽지만 기본 UserDe..
2022.11.22