기타

[CS] JWT (JSON Web Token)

위르겐 2022. 7. 17. 23:46

JWT는 JSON Web Token의 약어로

쿠키와 세션을 통한 로그인과는 

다른 방식의 로그인 기능으로

인증에 필요한 정보들을 암호화시키는 방식을 의미한다.

 

 

 

이론은 워낙 다뤄야될 내용들도 방대하고

쉽게 검색해볼 수 있으니

 

필자가 미니프로젝트를 하면서 사용했던

코드위주로 설명하겠다.

 

 

 

flask 프레임워크를 이용했으며

 

JWT

토큰의 지속기간을 결정할 datetime

그리고 DB에 저장될 password를 암호화하기 위한

hashlib을 import해온다.

 

 

그리고 secret_key를 지정해준다.

 

여기서 시크릿 키는

글 포스팅을 위해 아무거나 작성한 것이고

 

실제로는 더 복잡하고 강력한 암호키를 사용해야한다.

 

 

 

 

 

 

이렇게 했을 때

 

 

 

username과

nickname그리고 password 데이터를 회원가입으로 받고

DB에 저장하면

 

 

password가 굉장히 길고 복잡하게

저장된다.

 

 

이 값은 '유일'하다.

 

 

누가 DB에 접근해서 

password를 알고싶어도

다음과같이 복잡한 영문,숫자로 바꿔버리기 때문에

진짜 패스워드를 알 수 없는 것이다.

 

 

 

 

 

로그인을 한다고 가정했을 때

 

payload에 유저의 id와 exp를 payload라는 것에 담고

payload와 시크릿키 그리고 알고리즘 HS256을 

토큰에 담은 후 로그인 성공 시 같이 보내준다.

 

 

payload에서

exp의 존재이유는 토큰이 얼마동안 유효할지에 대한 내용이다.

 

60초에 60을 곱하고 24를 곱하면

로그인이 24시간 유지가 되는 것이다!

 

 

 

JWT로 로그인을 한 후

해당 브라우저의

개발자 도구에 들어가 

쿠키를 확인해보면

 

mytoken이라는 이름으로 정보가 저장되어있는데

이걸 삭제하거나

datetime에서 지정한 24시간이 지나지 않는 한

해당 브라우저에선 계속 자동로그인이 되는 것이다.

 

 

삭제하는 것도 mytoken을 오른쪽클릭해서 삭제버튼만 누르면 되기 때문에 

아주 간단하다.

 

 

 

 

아무리 이론을 구글링하고

공부해도 직접 코드작성하며 사용하지않으면

전부 아는 것이 아니다.

 

로그인 기능을 꼭 구현해보고싶었는데

직접 해보니 헷갈린다..

 

 

앞으로 

유저인증 생태계는 JWT가 평정하게 되는 것일까?

 

 

 

 

 

반응형

'기타' 카테고리의 다른 글

Cookie / Session  (0) 2023.01.17
SSR(Server Side Rendering)  (0) 2022.11.21
[CS] Reflow, Repaint  (0) 2022.06.18
[CS] 브라우저 렌더링 과정  (0) 2022.06.16
JSON파일 만들기  (0) 2022.06.07