JWT를 사용하는 이유
- JSON 객체 데이터를 안전하게 전송할 때
- JWT는 데이터를 키로 서명해서 토큰을 생성한다.
- 사용자의 Authorization 헤더 정보로 인증과 정보 조회를 진행할 때
- SWT(Simple Web Token), SAML(Security Assertion Marup Language Tokens)과 비교
- SAML에 비해 사이즈가 작습니다.
- SWT는 대칭키를 이용한 서명만 가능합니다.
- JWT와 SAML은 공개키/비공개키를 이용한 인증이 가능합니다.
JWT 구조
Header
- 일반적으로 헤더는 두 영역(토큰 타입, 암호화 알고리즘)을 포함합니다.
- 헤더는 Base64로 인코딩되어 JWT에 포함됩니다.
Payload
- 페이로드에는 사용자가 작성한 데이터를 포함합니다.
- 페이로드는 Base 64로 인코딩됩니다.
Signature
- 헤더, 페이로드를 비밀 키로 서명합니다.
발급받은 토큰을 이용한 인증 방법
JWT를 이용한 토큰 생성방법
const jwt = require('jsonwebtoken');
const token = jwt.sign({userId: user._id, user_nick: user.user_nick}, `${jwtSecret}`);
res.send({
token,
});
JWT 사용 주의 사항
- 만료 기간을 신중히 정하자 너무길면 해킹 됬을 때 피해가 늘어날 수 있고 너무 짧으면 사용자 불편이 심할 수 있다.(리프레시 토큰으로 보완 가능)
- 페이로드의 데이터는 쉽게 노출될 수 있습니다. 중요한 데이터를 포함해서는 안됩니다.
<참고>
'웹' 카테고리의 다른 글
Routing, Router?(express) (0) | 2022.01.21 |
---|---|
미들웨어 (0) | 2022.01.21 |
Express.js? (0) | 2022.01.21 |
웹 서버? (0) | 2022.01.21 |
HTTP (0) | 2022.01.21 |