배경 JWT토큰을 어디에 보관해야 되는지 제대로 알아보고 싶었습니다. 구글에 검색을 했을 때 대부분 LocalStorage에 보관하여 사용하는 글들이 정말 많습니다. 저도 생각없이 똑같이 구현했었습니다. 이러한 방식이 잘못되었다는 것을 깨닫고, 다른 사람들에게 공유하고 싶어서 글을 작성했습니다. 간단한게 LocalStoage가 뭔지 설명하고, 왜 LocalStoarge를 사용하면 안 되는지 설명하겠습니다. LocalStoarge 로컬스토리지 객체는 웹 스토리지(WebStorage) 중 하나입니다. 로컬스토리지 객체를 통해 브라우저 내에 키-값(key-value) 데이터 쌍을 저장할 수 있습니다. 데이터 공유 여부 데이터를 브라우저에 반영구적으로 저장하며, 브라우저를 종료 후 재시작해도 데이터가 남아있습니..
XSS(Cross Site Scripting) 공격이란 XSS(Cross Site Scripting) 공격 사이트 간 스크립팅(또는 크로스 사이트 스크립팅, 영문 명칭 cross-site scripting, 영문 약어 XSS)은 웹 애플리케이션에서 많이 나타나는 취약점의 하나로 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점이다. 주로 여러 사용자가 보게 되는 전자 게시판에 악성 스크립트가 담긴 글을 올리는 형태로 이루어진다. 이 취약점은 웹 애플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 나타난다. 이 취약점으로 해커가 사용자의 정보(쿠키, 세션 등)를 탈취하거나, 자동으로 비정상적인 기능을 수행하게 할 수 있다. 주로 다른 웹사이트와 정보를..
배경 토큰 방식의 인증은 두 가지 방법으로 나뉩니다. 1. Access Token만을 이용하는 방식 2. Refresh Token과 Acces Token을 같이 이용하는 방식 왜 2번 방식이 더 선호되는지, Refresh Token을 어디에 저장하고 어떤 방식으로 저장할 것인지 작성하겠습니다. 제가 하고있는 토이 프로젝트(간단한 SNS를 구현 중)에 적용한 코드입니다. 환경 Java 17 Spring 6.0.11 (Spring Boot 3.1.2) Gradle 8.2.1 Junit 5.9.3, Mockito 5.3.1 JWT Redis Refresh Token의 필요성 Access Token 만료시간을 짧게 하면 보안성은 좋아집니다. 그러나, Access Token의 만료시간을 짧게 가져가면 사이트를 이..
문제가 발생한 Controller UserControllerTest 그냥 봤을 때 전혀 문제 없이 진행할 수 있는 테스트입니다. User 관련한 Test 코드를 실행했을 때 상황을 보겠습니다. 유저 관련 Test만 진행했을 때 전혀 문제없이 통과합니다. 순서를 어떻게 해도 통과합니다. 단순 회원가입 기능만 작성했기 때문에 그렇게 꼬일 일이 없습니다. 그럼 전체 테스트를 돌려봤을 때 상황을 살펴보겠습니다. 전체 테스트 돌렸을 때 발생한 문제 UserControllerTest만 실패 다른 테스트는 리팩토링 과정 중에 아직 수정하지 않고 UserTest 쪽 먼저 진행 중에 글을 작성한 것입니다. 신경쓰지 않아도 됩니다. 대체 왜 UserControllerTest가 실패했을까요? 처음 이 문제를 해결하기 위해서..
에러발생 발생원인 분명 서버 실행하고 진행하면 잘 되는데 왜 이러한 에러가 발생할까? Jwt SecretKey를 어떻게 받고있는지 한 번 살펴보겠습니다. 저같은 경우에는 환경변수를 이용해서 key값을 받고있습니다. 그래서 서버가 실행되면 key값이 들어가야 되는데 테스트 코드를 작성하는 곳에는 환경 변수를 세팅하거나 yml이 존재하지 않기 때문에 @Value에서 에러가 발생한 것이였습니다. 해결방법 해결할 수 있는 방법은 2가지가 존재합니다. 첫번째: 환경변수 설정 모든 테스트 환경에 환경변수를 적용하는 방법입니다. 이건 테스트 클래스가 많아질 수록 귀찮고 놓칠 수 있는 부분이기 때문에 비효율적이라고 판단했습니다. 두번째: 테스트 전용 yml 생성 테스트 전용 yml을 생성하는 방법입니다. 이렇게 설정해..
이번 포스팅의 목적은 왜 공식문서를 볼 줄 알고 왜 봐야 되는지에 대한 제 생각을 적은 글입니다. 블로그검색을 통해 구현한 OAuth2 이 글을 쓰기 전에는 그냥 구글에 다 나와있고 내가 이미 해놨던 정보들이 있기 때문에 OAuth2에 대해 깊게 알지 않아도 복붙해서 사용만 할 줄 안다면 내가 그 기능을 완벽히 알고있다고 판단했었습니다. 이 말도 틀린 말은 아니라고 생각합니다. 결국 기능을 사용할 수 있으면 충분하니까요. 요구사항에 맞는 자료가 존재하지 않는다면 사소한 거 하나 구현할 수 없는 제 모습을 보고 다시 하나하나 구현했습니다. 처음 구글에서 본 OAuth2 코드입니다. OAuthAttributes 이 코드를 작성할 때 그냥 이렇게 쓰면 되는 거고 이렇게 만들어서 나누면 돼 ~ 이런 식으로 구현..