Connenctionless
클라이언트와 서버가 요청과 응답을 한 번 주고받으면 연결을 끊어버리는 특징을 말한다.
클라이언트가 request를 서버로 보내면 서버는 클라이언트가 보낸 request에 맞게 response를 보내고 연결을 끊는다.
Stateless
위처럼 요청과 응답으로 인해 통신이 끝난다면 상태 정보를 유지하지 않는 특징이다.
예를들어 메인페이지에서 로그인을 하고 다른 페이지로 넘어가면 다시 로그인을 해야된다.
이런 특징들 때문에 쿠키
와 세션
혹은 jwt
를 이용하여 사용자 인증에 대한 정보를 유지할 수 있다.
key
와 value
로 이루어진 데이터이다.쿠키
가 유지된다.쿠키
가 저장되면 다음 요청은 쿠키
에 담긴 정보를 이용해 참조한다.쿠키 동작 방식
그러나 문제점으로 사용자 인증에 대한 정보를 모두 클라이언트가 가지고 있게되므로
http 요청을 탈취당할 경우 쿠키
자체를 탈취당해 사용자 정보를 모두 빼앗길 수 있다.
그래서 쿠키
자체는 보안과는 큰 상관이 없는 장바구니 혹은 자동로그인 설정 등에 이용할 수 있다고 한다.
세션
은 쿠키
를 기반으로 하지만 클라이언트에 저장하는 쿠키
와는 다르게 서버에 저장하여 관리한다.세션ID
를 클라이언트마다 부여하게되며 클라이언트가 종료되기 전까지 유지한다.쿠키
보다는 보안이 좋다.토큰(JWT)
JWT
는 Json Web Token
의 약자이고 인증에 필요한 정보들을 암호화시킨 토큰을 말한다.
세션
방식처럼 토큰
자체를 쿠키
에 담아서 보내줄 수도 있고 HTTP 헤더에 담아서 보내줄 수도 있다.
토큰은 3가지 요소로 구성되어 있다.
Header: 3가지 요소를 암호화할 알고리즘 등과 같은 옵션이 들어간다.
Payload: 유저의 고유 ID 등 인증에 필요한 정보가 들어간다.
Verify Signature: Header, Payload와 Secret Key가 더해져 암호화된다.
Header.PayLoad.VerifySignature로 만들어진다.
Header와 Payload는 누구나 디코딩하여 내용을 확인할 수 있기때문에 유저의 비밀번호 같은 정보는 넣지 않도록 한다.
하지만 Secret Key를 알지 못하면 VerifySignature는 복호화할 수 없다.
그렇기 때문에 토큰을 변조하더라도 VerifySignature가 Payload를 기반으로 암호화 되었기 때문에 유효하지 않은 토큰으로
검증이 가능하다.
토큰 동작 방식
토큰은 일단 세션보다 훨씬 간편한다.
세션처럼 별도의 저장소 관리가 필요하지 않고 토큰을 발급 후 클라이언트에게 전송 후 검증하는 과정만 있으면 된다.
그러나 발급된 JWT는 삭제가 불가능하다.
세션 같은 경우에는 악의정으로 사용된다면 해당 세션을 삭제하면 된다.
토큰은 탈취당하게 되면 유효 시간이 종료되기 전까지는 탈취자가 얼마든지 악의적으로 사용이 가능하다.
그래서 Refresh Token이라는 것을 이용해 피해를 조금이라도 줄일 수 있다.
pasacasino
https://nwprideireland.com