Spring Security
-
Spring security JWT - 7. ignore 설정으로 filter 무시하기Spring Security/jwt 2023. 12. 4. 17:40
저번글까지는 JWT filter에서 ANONYMOUS 라는 값으로 계속 비교하여 토큰값이 없을때에도 접속이 가능했다. 로그인이 됐을때만 동작하는 /me API가 동작된다 (값에 ANONYMOUS를 넣었기 때문에) WebSecurityCustomizer 를 사용하여 filter를 타지 않는 ignore 설정을 할 수 있다고한다. 이렇게하면 Security FilterChain을 거치지않고 동작할 수 있는 것 같다. 코드 WebSecurityCostomizer를 Bean으로 등록한다. 기존에 여기에 적었던 위 API 리스트들은 위에 적었기 때문에 삭제해도 된다. 기존에 JwtAuthenticationFilter를 주입받아 사용했는데, 여기선 그냥 생성하여 사용한다 Bean으로 등록하면 Security fil..
-
Spring security JWT - 6. IUWT방식을 이용하여 방어하기Spring Security/jwt 2023. 12. 3. 16:28
이 글은 블로그에 적힌 IUWT를 이용한 JWT보안 방식을 읽고 작성함. 위 방식은 UUID값을 만들어 같이 토큰에 넣고, 쿠키에 UUID값을 담아 토큰이 탈취 당했을 때를 대비하여, 쿠키에 있는 UUID값과 같이 비교하여 해당 토큰의 탈취 여부를 확인하고, 해킹범이 해당 토큰을 사용하지 못하도록 막는 것 같다. 위 방식은 Refresh Token이 필요없고, 그에 따라 Redis에 저장 할 필요도 없기 때문에 소규모 서비에서 적합하다고 적혀있는데, 개인적인 생각엔 Refresh Token을 사용하는 것보다 더 좋은 것 같다. 매 요청시마다 UUID 값 두개를 비교하면 되서 Access Token을 길게 가져가거나, 조금 더 보안을 강화? 하기 위해 Access Token을 짧게 가져가고 UUID 값이 ..
-
Spring security JWT - 4. RefreshToken으로 갱신하기Spring Security/jwt 2023. 11. 20. 23:01
accessToken이 탈취되면 안되지만, 만약에 탈취가 되었을 경우, Server는 stateless하기 때문에 사용자를 강제로 종료 시킬 수 없다. 거기에 대한 방안으로 accessToken의 유효시간을 짧게 가져가, 탈취된 토큰으로 짧은시간동안만 활동 할 수 있게 미리 제약을 걸어놓는다. 유효시간이 지나 만료된 accessToken은 더이상 사용 할 수 없어, refreshToken을 사용해 재발급 받을 수 있다. refreshToken은 accessToken보다 긴 유효시간을 가지고 있다. refreshToken까지 탈취 당하면 진짜 위험해져서 다른 방안이 추가되어야 한다. (탈취는 서버잘못이 아닌 클라이언트 잘못.. 잘 간수해야지) 우선 이번에는 refreshToken을 통해 재발급 받는 로직을..
-
-
Spring security JWT - 2. JWT token 발급하기Spring Security/jwt 2023. 11. 20. 18:42
이 글은 Spring security - 2. UserDetailsService를 사용하여 로그인 구현 에서 작성한 코드를 바탕으로 추가 작성 함. 1. Build.gradle 작성 가장 최신 버전을 가져왔다. (https://jwt.io/libraries?language=Java 에 가보면 jjwt 말고 다른 jwt 라이브러리도 볼 수 있는다. 별 갯수를 보면 jjwt를 가장 많이 사용하는 것 같다.) 테스트를 위해 swagger 추가 2. Spring security 수정, application yml 추가 앞 글에서 적은 것 처럼 Session 방식이 아닌 Token을 만들어 Cookie에 저장 할 것이기 때문에 sessionCreationPolicy에서 STATELESS를 넣어 Session에 저..
-
Spring Security JWT - 1. JWT에 대해Spring Security/jwt 2023. 11. 20. 15:38
JWT란 JSON Web Token의 약자로 암호화된 Token을 Json 형태로 만든 것. Claim 방식을 사용하는데, Oauth처럼 Token을 받고 서버에서 권한을 확인해 처리하는 방식이 아닌 Claim 이란 곳에 사용자에 대해 권한과 같은 여러 정보 (개인정보 X)가 들어있어, 서버에서 사용자를 검색하고, 권한을 찾는 일을 할 필요가 없다고 한다. 인증과 인가가 한번에! 전에 했던 Spring security의 session 방식으로 로그인 사용자를 관리하는 것이 아닌 로그인 사용자에게 token을 주고 그 토큰이 유효한 토큰인지 확인하여 동작하는 방식으로 사용된다고 한다. 배경? 서버에 저장되어 관리하는 Session방식은 사용자가 많아질수록 Session에 저장되는 정보량이 많아져 성능에 문..
-
Spring security - 4. 중복 로그인 로그아웃 시키기Spring Security/security 2023. 11. 17. 15:28
Spring security는 session을 관리 할 수 있어서, 같은 사용자가 들어왔을 때 기존에 로그인한 session 또는 마지막에 로그인한 session을 선택해서 로그아웃을 시킬 수 있다고 한다. * 코드 작성 httpSecurity에 sessionManagement 설정을 넣어주어야 한다. sessionFixation에서 chageSessionId 설정을 하는데, 동일한 아이디로 계속 로그인을 해도 SessionId가 변경이 안된다고 하는 것 같다. SessionId가 변경이 안되고 고정되면 xss공격으로 SessionId를 탈취 할 수 있다고 한다. 그래서 cahgeSessionId설정을 통해 중복 로그인시 SessionId를 변경한다. maximunSessions를 통해 Session의 ..