2019. 9. 8. 23:16ㆍTIL
session/cookie
사용자가 로그인을 하게 되면 서버에서는 DB속의 사용자를 확인 후 사용자의 고유한 ID값을 부여하여 세션 저장소에 저장한다.
그리고 세션 ID를 발행해주고 사용자는 서버에서 세션 ID를 쿠키에 저장한 후 인증이 필요할 때 마다 쿠키를 헤더에 실어 보낸다.
서버에서는 쿠키를 받아 세션 저장소에서 대도를 한 후 대응되는 정보를 가져와서 사용자에 맞는 데이터를 보내준다.
session/cookie 방식은 기본적으로 session저장소를 필요로 한다,
session 저장소는 사용자의 정보를 저장하고 세션ID 값을 만들어 HTTP헤더에 실어 사용자에게 전달한다. 그리고 사용자는 인증이 필요한 요청에 쿠키에 보관하고 있던 sessionID를 보낸다. 웹 서버는 이 쿠키를 받아 session 저장소에 젖장되어 있는 정보와 매칭시켜 인증을 완료 한다.
**세션과 쿠키
session : 서버에서 가지고 있는 정보
cookie : 사용자에게 발급된 세션을 열기 위한 열쇠(SESSION ID)
- 쿠키만으로 인증을 사용한다는 말은 서버의 자원은 사용하지 않는다는 것, 즉 클라이언트가 인증 정보를 책임지게 된다.
- 위와 같은 경우는 HTTP 요청을 탈취당할 경우 다 털리게 된다.
- 따라서 보안과는 상관없는 단순히 장바구니나 자동로그인 설정 같은 경우에는 유용하게 사용된다.
JWT
사용자가 로그인을 하면 서버는 사용자를 확인 후 유니크ID값을 부여한 뒤 기타 정보와 함께 Payload에 넣는다.
JWT 토큰의 유효기간을 설정한 뒤 암호화 할 SECRET KEY를 이용해 ACCESS TOKEN을 발급하고 사용자는 Acess Token을 받아 저장한 후, 인증이 필요할 때 토큰을 헤더에 담아 보낸다.
서버에서는 해당 토큰의 Verify Signature를 SECRET KEY로 복호화한 후, 조작 여부, 유효기간을 확인하고 검증이 완료된다면, Payload를 디코딩하여 사용자의 ID에 맞는 데이터를 가져온다.
**세션/쿠키 방식과 차이점
- 세션/쿠키는 세션 저장소에 유저의 정보를 넣는 반면, JWT는 토큰 안에 유저의 정보들이 넣는다
- 클라이언트 입장에서는 HTTP 헤더에 세션ID나 토큰을 실어서 보내준다는 점에서는 동일 but 서버 측에서는 인증을 위해 암호화를 하냐, 별도의 저장소를 이용하냐는 차이가 발생
**취약점
이미 발급된 JWT에 대해선 돌이킬 수 없다. JWT는 한번 발급 되면 유효기간이 완료될 때 까지 계속 사용이 가능하기 때문
- 해결책
- Access Token의 유효기간을 짧게 정한다.
- Refresh Token이라는 새로운 토큰을 발급한다.
Payload 정보가 제한적 따로 암호화 되어 있지 않기 때문에 디코딩하면 누구나 확인이 가능하다.
따라서 중요한 정보들은 넣을수 없다.
'TIL' 카테고리의 다른 글
[TIL] 09.10 (0) | 2019.09.11 |
---|---|
[TIL] 0909 (0) | 2019.09.10 |
[TIL]09.05 (0) | 2019.09.06 |
[TIL] 09.04 (0) | 2019.09.05 |
[TIL] 09.03 (0) | 2019.09.04 |