ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [항해 99 주특기] 토큰 && JWT
    개발일지/항해 99 2023. 7. 12. 23:55

    토큰

    Tocken이란 클라이언트에서 보관하는 암호화된 인증 정보로써 서버에서 발급 보관하는 정보인 session과의 가장 큰 차이점은 보관하는 방식이다. 

    이러한 토큰은 세션처럼 서버에서 보관할 필요가 없어서 서버의 부담을 줄여주고 최근에 가장 많이 사용되는 기술이다

     

    이러한 토큰 중 하나인 JWT(Json Web Tocken) 는 헤더와 페이로드, 시그니쳐로 구성 되어있으며 JWT 공식 문서를 가서 확인하면 인코딩 된 상태와 디코딩 된 상태를 볼 수 있다 (왼쪽 인코딩코드 오른쪽 디코딩코드)

     

    서버에서 발급받은 jwt에는 시크릿코드가 있는데 이 시크릿코드는 보안을 강화해서 보관해야한다 왜냐하면  시크릿코드를 이용해서 서버에서 jwt를 브라우저에게 발급 해주고 그걸 브라우저가 관리하기 때문이며 이 시크릿코드를 이용해서 인코딩 된 JWT를 디코딩할 수있기 떄문이다.

    그리고 암호화된 코드는 누구나 복호화해서 볼 수 있다(단, payLoad부분만)

    그렇기때문에 토큰의 용도는 페이로드에 대한 보호가 아닌 위조 방지에 있다는 것을 기억해야한다.

    페이로드를 토큰화 할때 필요한 시그니쳐에 대한 시크릿키는 복호화뿐만아니라 토근이 유효한지를 검사하는 데 사용이 된다. 

     


     

    JWT 인증 방식 

    로그인과 회원가입 시 토큰 인증

    클라이언트가 서버에게 포스트 요청을 보내고 이를 서버는 데이터베이스에서 조회해서 결과를 받아낸다.

    서버에서는 시크릿키에 의해서 JWT을 만들어서 발급을 하게 된다. 그렇기떄문에 보안상 유지가 필수인 시크릿키이다

    만들어진 JWT는 쿠키와 바디로 넣는 2가지 방식이 있는데  쿠키로 넣는 방식이 많이 쓰인다.

     

    인가 요청할 때 코드상으로는 bearer ${token} 형태를 만들어서 요청을 하게 되며 서버에서는 JWT을 가지고 검증을 하여 서버가 시크릿코드를 이용해서 발급했던 JWT인지 확인을 하고 이상이 없다면  db에 요청에 대한 response를 받아서 클라이언트에게 준다.

     

    인코딩 된 accessTocken을 확인해서 보면 .을 기준으로 헤더와 페이로드와 시그니쳐로 나뉘는 것을 알 수 있다

     

    refresh tocken은 보안에 취약한 JWT방식의 보안을 좀 더 강화하는데 도움이 된다

    쿠키에 저장해놓은 액세스토큰은 탈취당할 가능성이 있기때문에 액세스토큰의 유효기간을 짧게 설정하고 리프레쉬토큰을 통해서 액세스토큰이 만료되었을 떄 서버에서 JWT를 발급하게 하는 방식으로  보안을 강화할 수 있다.

     

    댓글

Designed by Tistory.