JWT 총 정리

소비자우롱차·2024년 10월 29일

참고


1강 JWT, 작업 1, 프로젝트 세팅


2강 JWT, 서버가 최초로 접속하는 브라우저에게 쿠키에 세션키 정보를 담는 방식으로 사용자를 구분


3강 JWT, 초창기 앱의 통신 방식, 쿠키


4강 JWT, 서버에서 신원확인용 토큰 발급, 해킹 발생시 비번을 바꾸지 않도록

개념

1. 앱 시작 방식

  1. 과거
  • 아이디 비번 입력
  • 앱이 서버에게 해당 아이디 비번이 유효한지 물어본다.
  • 유효하면 앱은 그 아이디 비번을 영구 저장한다
  • 글쓰기 -> HTTP POST title, body, id, pw
  • 좋아요 -> HTTP POST articleId, id, pw
  1. 토큰 도입
  • 아이디 비번 입력
  • 앱이 서버에게 해당 아이디 비번이 유효한지 물어본다.
  • 서버가 토큰을 발급
  • 유효하면 앱은 그 토큰을 영구 저장한다.
  • 글쓰기 -> HTTP POST title, body, 토큰
  • 좋아요 -> HTTP POST articleId, 토큰
    • ID/PW 대신에 토큰을 사용한다.

2. 결론

  1. ID/PW => 누군지?
  2. 토큰 => 누군지? 만료 가능
  • 토큰을 쓰는 이유
    • 찝찝함을 줄이기 위해(토큰을 쓰지 않으면 휴대폰(단말기)에 원문의 ID/PW가 남아있어야 하기 때문에)
    • 비번을 바꾸기 귀찮아서

5강 JWT, JWT는 정보를 담을 수 있고 유효성 체크에 DB조회를 사용하지 않는다.

개념

  1. 토큰의 단점
  • 로그인 여부를 SELECT 해야한다. -> 옛날에는 난수로 생성했었다.

  • 그러면? 토큰에다가 의미있는 데이터를 저장할 수 없나?

  • 그래서 나온게 JWT

    • 유효성 체크를 CPU 연산만으로 할 수 있다.
    • 데이터를 담을 수 있는 토큰
  • 따라서 토큰에는 털렸을 때 가장 쓸모없는 데이터로 서버에서 유저(데이터)를 식별할 수 있을 것. 이게 토큰에서 가장 좋은 방식!


6강 JWT, JWT 만들 때 시크릿 키로 흔적을 남기고, JWT 정보를 얻을 때 시크릿 키로 그것이 오염되지 않았음을 인증한다

개념

1.

  1. 옛날 토큰 : 1231412415125 -> 난수
  2. JWT : {"id" : 1, "name" = "김철수", "age" = 22}
  3. 2번을 base654 encode한 결과 : eyJpZCIgOiAxLCAibmFtZSIgPSAi6rmA7LKg7IiYIiwgImFnZSIgPSAyMn0=
  4. 3번을 Hash(시크릿키) 암호화를 거치면 -> JWT가 된다.

2. 옛날 토큰 방식

  1. 번호 : 1
  2. 아이디 : abcd
  3. 비밀번호 : 1234
  4. 이름 : 김철수
  5. 나이 : 22
  6. 토큰 : 123123214125
  7. SELECT * FROM `member` WHERE token = '123123214125'
  8. 7번의 결과
{
"번호" : "1",
"아이디" : "abcd",
"비밀번호" : "1234",
"이름" : "김철수"
"나이" : "22",
"토큰" : "123123214125"
}

3. 새 토큰 방식

  1. 번호 : 1
  2. 아이디 : abcd
  3. 비밀번호 : 1234
  4. 이름 : 김철수
  5. 나이 : 22
  6. 토큰 : 123123214125
  7. base64 encode한 결과 : 67KI7Zi4IDogMQrslYTsnbTrlJQgOiBhYmNkCuu5hOuwgOuyiO2YuCA6IDEyMzQK7J2066aEIDog6rmA7LKg7IiYCuuCmOydtCA6IDIyCu2GoO2BsCA6IDEyMzEyMzIxNDEyNQp9
  8. 7번에 흔적(시크릿 키)를 더해야한다. -> 신뢰할 수 있는 데이터인지 알려주기 위해

7강 JWT, 작업 2, 시크릿키 원문으로 HMAC 암호화 방식에 맞는 SecretKey 객체 만들기


8강 JWT, 작업 3, SecretKey 객체는 JwtProvider를 통해서 얻는다


9강 JWT, 작업 4, accessToken 생성


10강 JWT, 작업 5, accessToken 인증 및 claims 얻기

profile
우당탕탕....

0개의 댓글