-
2024-06-10 TIL (jwt (jsonwebtoken))카테고리 없음 2024. 6. 10. 15:37
jwt (jsonwebtoken)
jwt 구조
헤더, 내용, 서명이 '.(dot)'을 구분자로 하여 JWT 토큰 1개를 이룹니다.
ex)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. (HEADER) eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.(PATLOAD) SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c(SIGNATURE)
HEADER
{ "alg": "HS256", "typ": "JWT" }
헤더에서는 해시 알고리즘과 토큰의 타입을 정의할 수 있습니다.
HS256은 HMAC SHA 256을 의미합니다.
해시 알고리즘 중 한 가지입니다.
타입의 값 JWT는 이 토큰을 JWT로 지정한다.PAYLOAD:DATA
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
내용에서는 전달하는 데이터를 포함할 수 있습니다.
VERIFY SIGNATURE
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret )
secret은 말 그대로 유저가 지정하는 비밀 코드입니다.
위와 같이 해싱하면 서명이 완성됩니다.access token, refresh token
출처 : https://velog.io/@vamos_eon/JWT%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EA%B0%80-%EC%82%AC%EC%9A%A9%EC%B2%982 - access token : API를 사용하기 위한 인증용 토큰
이 토큰이 만료되면 access token이 없는 것과 마찬가지입니다.
따라서 접근을 막을 수 있습니다.
- refresh token : access token의 유효 기간 연장을 위한 토큰
access token이 만료되었지만 refresh token으로 access token을 새로 발급받을 수 있게 해줍니다.
그렇다면 여기서 refresh token은 사용하는이유가 무엇인가 ?..라는 의문이 생긴다...
전달하는방식 - > cookies
jwt를 전달하는 방식은 여러가지가 있지만, 그거는 나중에 또 정리하도록 하고 이번에는 cookies방식으로 전달하는 방식으로 진행한다 .
Cookie에 JWT를 포함하여 보내주고 기본적으로 브라우저에 저장되고 자동으로 제거되지 않습니다.
때문에 Cookie옵션을 세팅을 하지 않고 사용하면 굉장히 위험합니다.그렇기때문에 이를 방지하는 방법으로
1. expiry를 설정하는 방법,
ㄴ> 토큰의 유효 기간을 지정하여 발급을 함으로써 만료된 이후에는 브라우저 쿠키에서 제거됩니다.
2. 다른 도메인에서 접근 불가하게 만드는 방법
ㄴ> CORS 도메인을 제한하는 방법
3. 자바스크립트로 쿠키 값에 접근하는 것을 막는 방법
- access token : API를 사용하기 위한 인증용 토큰