[ 서버가 만든 웹 토큰 ]
ABCD.PPPP. 이게 서버가 만든 웹토큰
(ABCD와 metacoding을 암호화해서 PPPP가 나옴)
서버는 metacoding을 모르면 검증을 못한다. 때문에 metacoding을 서버가 꼭 알아야함! (* metacoding은 '환경변수'로 설정해줘야 한다) ABCD, metacoding => SHA256 해봐서 => PPPP가 나오는지 확인하면 됨! 다시 해쉬했을 때, 같은 값이 나오는지 검증해봐야 하기 때문! 토큰 생성도, 검증도 서버가 하기 때문에 JWT를 쓸 때, RSA를 쓸 필요 없다. 그러나 누가 토큰을 탈취하면, 서버가 세션을 관리하는게 아니라 검증만 해보는 거니까 세션처럼 30분 있다가 무효화되는게 없어서 한 번 탈취되면 유효기간이 만료될 때까지 계속 사용이 가능하다. 한 번 털리면 계속 털리는 것! 때문에 이렇게 하지말고
[ time을 넣어주자 ]
time이 키값이어야함!
이 값(time)을 현재 시간으로부터 일정 기간 후로 설정하여, 토큰이 탈취되더라도 유효 기간이 지나면 더 이상 사용할 수 없게 만든다. 시간으로 안해놓으면 서버 입장에서 막을 수 있는 방법이 없기 때문에 시간이 없으면 토큰 방식은 엄청 위험하다. 또한 해킹해서 털려고 해도, 해커들은 metacoding을 모르기 때문에 시간을 바꿀 수 없어서 (암호화를 못 시키는...?)
미인증. 이라고 내보낼거임
1. 서버 입장에서 아무도 모르는 시크릿 키 하나를 만든다. (이 키는 토큰을 생성하고 검증할 때 사용됨) 2. 사용자가 로그인을 시도하면 id, password 같은 걸 검증, 인증이 성공하면(=로그인되면) 서버는 시크릿 키를 사용해 토큰을 생성하고, 응답 3. 클라이언트(ex.웹 브라우저, 모바일 앱)는 서버로부터 받은 토큰을 저장해두었다가, 다음 요청부터 토큰을 포함하여 서버로 보내고, 서버는 요청을 받을 때마다 포함된 토큰을 시크릿 키로 토큰 검증 4. 토큰이 유효하다면, 요청한 작업을 수행하고 필요한 데이터를 클라이언트에게 응답. 토큰이 무효하다면, (유효 기간이 지났거나 변조되었다면) 접근 거부 5. 끝!
Share article