문제액세스 토큰과 리프레쉬 토큰을 어떤 응답 방식과 양식으로 담아야 하는지. 상황얼마 전 개인 프로젝트에서 인증 부분을 실제 서비스를 염두에 둔다면 어떤 식으로 처리를 할지 고민했던 적이 있다. JWT로 Access token, Refresh token을 이용해서 인증 방식을 택했고, 로그인 시액세스 토큰을 응답 헤더의 Access-Token 키에,리프레쉬 토큰을 HttpOnly 쿠키로 Refresh-Token 키에넣어서 보내주었다. 액세스 토큰을 헤더에, 리프레쉬 토큰을 쿠키에 넣은 이유는 아래와 같았다. 프론트에서는 액세스 토큰을 로컬스토리지에 저장하게 하고, 리프레쉬 토큰은 쿠키 저장소에 저장되어 저장소를 분리시켰다. 만약 한 저장소가 뚫려도 다른 저장소의 토큰은 안전하도록 의도를 담았다.리프레..
JWT
지금까지 프로젝트에서는 헤더에 JWT를 담아 보냈었다. 근데 부트캠프 최종 프로젝트의 옆 팀의 분께서 쿠키에도 보내는 방식이 있다는 걸 알려준 후로 머릿속에 두긴 했는데, 이번에는 쿠키에 넣어서 프로젝트를 진행해보기로 했다. https://velog.io/@0307kwon/JWT%EB%8A%94-%EC%96%B4%EB%94%94%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%B4%EC%95%BC%ED%95%A0%EA%B9%8C-localStorage-vs-cookie JWT는 어디에 저장해야할까? - localStorage vs cookie이번에 지하철 미션을 만들면서 JWT를 클래스 property에 저장했었는데 리뷰어 분께 해당 부분을 피드백 받으면서 어디에 JWT를 저장하는 것이 좋..
자바에서 JWT를 다루는 라이브러리 중 JJWT 가 있다.https://github.com/jwtk/jjwt?tab=readme-ov-file#jws-example GitHub - jwtk/jjwt: Java JWT: JSON Web Token for Java and AndroidJava JWT: JSON Web Token for Java and Android. Contribute to jwtk/jjwt development by creating an account on GitHub.github.com 기존 프로젝트에서 0.11.5 버전을 쓰고 있었는데, 이번에 개인 프로젝트에서 0.12.5 버전으로 올리면서 바뀐 부분을 다뤄보려고 한다. 우선 Key 부분이 SecretKey와 PublicKey 로 나..
JWT (JSON Web Token) JWT란, 인증에 필요한 정보들을 암호화 시킨 JSON 토큰을 의미한다. JWT는 JSON 데이터를 Base64 URL-safe Encode 를 통해 인코딩하여 직렬화한 것이며, 토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자서명도 들어있다. 따라서 클라이언트가 JWT를 서버로 전송하면 서버는 서명을 검증하는 과정을 거치게 되며, 검증이 완료되면 응답한다. Base64 URL-safe Encode 란, 일반적인 Base64 Encode에서 URL에서 오류없이 사용하도록 +, / 를 각각 -, _로 표현한 것이다. JWT 구조 JWT는 .을 구분자로 해서 3가지 문자열의 조합으로 나타내며, header.payload.signature 로 구성되어 있다. 이거는 ..
Cookie / Session / Token 인증 방식 종류 일반적으로 서버가 클라이언트 인증을 확인하는 방식은 크게 쿠키, 세션, 토큰 3가지 방식이 있다. Cookie 인증 쿠키는 Key-Value 형식의 문자열이다. 클라이언트가 어떤 웹사이트에 방문하면, 그 사이트의 서버를 통해 브라우저에 설치되는 정보 기록용 파일이다. 그래서 각 사용자마다 고유 정보 식별이 가능해진다. Cookie 인증 방식 브라우저가 서버에 요청을 보낸다. 서버는 요청에 대한 응답에 브라우저에 저장하고 싶은 정보를 응답 헤더의 Set-Cookie에 담는다. 이후 브라우저는 요청을 보낼 때마다 저장된 쿠키를 요청 헤더의 Cookie에 담아 보낸다. 서버는 쿠키에 담긴 정보를 바탕으로 요청의 주체를 식별한다. Cookie 방식의 ..