ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JWT 토큰이란?
    front-end/Javascript 2023. 5. 16. 19:08
    반응형

     

     

     

     

     

    JWT(JSON Web Token)란 

    인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미한다. 

    그리고 JWT 기반 인증은 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식이다

    (시간에 따라 바뀌는 어떤 상태값을 안 갖는 것 - stateless, / 반대로 세션은 stateful)

     

     

    JWT(JSON Web Token)구조

    1. Header :  JWT 에서 사용할 타입과 해시 알고리즘의 종류가 담겨있으며,

    2. Payload : 서버에서 첨부한 사용자 권한 정보와 데이터가 담겨있다.

                    즉, 서버와 클라이언트가 주고받는 시스템에서 실제로 사용될 정보에 대한 내용을 담고 있는 섹션이다.

    key-value 형식으로 이루어진 한 쌍의 정보를 Claim이라고 칭한다.

    3. Signature : Header, Payload 를 Base64 URL-safe Encode 를 한 이후 Header 에 명시된 해시함수를 적용하고,

                        개인키(Private Key)로 서명한 전자서명이 담겨있다.

     

     

     

     

     

    JWT(JSON Web Token)를 이용한 인증 과정

    1. 사용자가 ID, PW를 입력하여 서버에 로그인 인증을 요청한다.
    2. 서버에서 클라이언트로부터 인증 요청을 받으면, Header, PayLoad, Signature를 정의한다.
         Hedaer, PayLoad, Signature를 각각 Base64로 한 번 더 암호화하여 JWT를 생성하고 이를 쿠키에 담아 클라이언트에게 발급한다.
    3. 클라이언트는 서버로부터 받은 JWT를 로컬 스토리지에 저장한다. (쿠키나 다른 곳에 저장할 수도 있음)
         API를 서버에 요청할때 Authorization header에 Access Token을 담아서 보낸다.
    4. 서버가 할 일은 클라이언트가 Header에 담아서 보낸 JWT가 내 서버에서 발행한 토큰인지

        일치 여부를 확인하여 일치한다면 인증을 통과 시켜주고 아니라면 통과시키지 않으면 된다.
        인증이 통과되었으므로 페이로드에 들어있는 유저의 정보들을 select해서 클라이언트에 돌려준다.
    5. 클라이언트가 서버에 요청을 했는데, 만일 액세스 토큰의 시간이 만료되면 클라이언트는 리프래시 토큰을 이용해서
    6. 서버로부터 새로운 엑세스 토큰을 발급 받는다.

     

     

     

     

    다만 이 JWT도 제 3자에게 토큰 탈취의 위험성이 있기 때문에, 

    그대로 사용하는것이 아닌 Access Token, Refresh Token 으로 이중으로 나누어 인증을 하는 방식을 현업에선 취한다.

    Access Token 과 Refresh Token은 둘다 똑같은 JWT이다. 

    다만 토큰이 어디에 저장되고 관리되느냐에 따른 사용 차이일 뿐이다.

    Access Token : 클라이언트가 갖고있는 실제로 유저의 정보가 담긴 토큰으로,

                              클라이언트에서 요청이 오면 서버에서 해당 토큰에 있는 정보를 활용하여 사용자 정보에 맞게 응답을 진행
    Refresh Token : 새로운 Access Token을 발급해주기 위해 사용하는 토큰으로 짧은 수명을 가지는 Access Token에게 

                                새로운 토큰을 발급해주기 위해 사용. 해당 토큰은 보통 데이터베이스에 유저 정보와 같이 기록.
                                Access Token은 접근에 관여하는 토큰, Refresh Token은 재발급에 관여하는 토큰의 역할로

                                사용되는 JWT 이라고 말할 수 있다.

     

     

     

    반응형

    'front-end > Javascript' 카테고리의 다른 글

    javascript 변수  (0) 2023.06.05
    Cookies란 무엇일까?  (0) 2023.05.24
    javascript await란?  (0) 2023.05.15
    javascript 콜백함수(Callback Function)란?  (0) 2023.05.15
    Token 인증방식, access token, refresh Token  (0) 2023.05.15
Sua by Tistory.