만약 접속한 사이트에 로그인한 사람만 보여주고 싶다면?
1. session
2. token
→ 둘 중 하나 이용하면 구현 가능
하지만,
Session과JWT의 차이점은?
Session:입장권에 써 있는 정보들이 별로 없다.
- ex)발급번호:a123
→ 회원이 입장권 제시할 시 서버가 메모리나 DB에 만들어 둔 세션스토어에서 조회를 하여 문제가 없다면 통과JWT:입장권에 써 있는 정보들이 많다.
- ex)회원명,이메일,발급일,유효기간 등등
→ Session에서의 조회 방식은 똑같으나 입장권의 정보들이 많아 서버에 부담이 덜간다.
JWT사용시 심각한 보완 이슈 4가지eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9obiIsIu ycoO2aqOq4sOqwhCI6MTUxNjIzOTAyMn0._6nr7vDBcUbGAtLV_nVh_Cnr _uO1GNLJrZvp0DFSUbU //JWT 문자열 인코딩{ //HEADER "alg": "HS256", "typ": "JWT" }{ //PAYLOAD "name": "John", "유효기간": 1516239022 }
- 입장권의 정보를 받은 후 짧은 코드로 인코딩한 것이 JWT 입장권입니다.
- 문제1.
alg:none공격
- 간혹 어떤 서버들은 입장이 됩니다.
- 하지만, 최신 라이브러리 상관없다.
- 문제2.
JWT는 변환이 쉽다.- 문제3. 시크릿키 문제
- 키를 매우 길게 사용하거나, 라이브러리 적용 가능한지 확인
- 문제4.
JWT탈취
- 훔치기 어렵게 HttpOnly cookie 사용
- JWT 블랙리스트
- JWT 유효기간 짧게
- refresh token rotation(라이브러리 찾아보기)
✍ 결론
session 방식JWT Token 방식참고:애플코딩