JSON Web Token: JWT를 이용한 RESTful API 인증
✔ JWT란?
💡 JSON Web Token is an open and standard (RFC 7519) way for you to represent your user’s identity securely during a two-party interaction. Particularly, when two systems exchange data you can use JSON Web Token to identify your user without having to send private credentials on every request.
JWT는 일반적으로 다음과 같습니다.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjEzODY4OTkxMzEsImlzcyI6ImppcmE6MTU0ODk1OTUiLCJxc2giOiI4MDYzZmY0Y2ExZTQxZGY3YmM5MGM4YWI2ZDBmNjIwN2Q0OTFjZjZkYWQ3YzY2ZWE3OTdiNDYxNGI3MTkyMmU5IiwiaWF0IjoxMzg2ODk4OTUxfQ.uKqU9dTB6gKwG6jQCuXYAiMNdfNRw98Hw_IWuA5MaMo
언뜻 복잡해 보이지만 이해하면 JWT의 구조는 다음과 같이 단순하다.
<base64-encoded header>.<base64-encoded payload>.<base64-encoded signature>
즉, 올바른 형식의 JWT는 세 개의 연결된 Base64url 인코딩 문자열로 구성되며 점
(.)
으로 구분되며 다음과 같습니다.✔ JWT(JSON 웹 토큰)로 RESTful API 구축
먼저 이름이 "JWT"인 폴더를 만들고 프로젝트 구조를 살펴보겠습니다.
그런 다음 JWT 디렉토리에서 명령줄을 열고 이 명령을 작성합니다.
npm install --save express body-parser morgan jsonwebtoken
1 - index.js
const express = require('express'),
bodyParser = require('body-parser'),
jwt = require('jsonwebtoken'),
config = require('./configurations/config'),
cors = require('cors'),
app = express();
//set secret
app.set('Secret', config.secret);
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));
// parse application/json
app.use(bodyParser.json());
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
app.get('/', function (req, res) {
res.send('App is running on http://localhost:3000/');
});
2 - 구성/config.js
module.exports = {
secret: "heymynameisminh"
}
이제 모든 것이 괜찮은지 확인하세요. 😃 이 명령줄을 실행하세요.
node index.js
❗️ Make sure that you are standing in the right directory to run index.js file (following our project structure)
http://localhost:3000/에서 브라우저를 엽니다.
잘했어요! 모든 것이 잘 작동합니다. 계속해
3 - 인증 시스템 설정
데이터베이스의 사용자 이름과 암호가 "techx"와 "123"이라고 가정하고 index.js 파일에 이 코드를 작성합니다.
app.post('/authenticate', function (req, res) {
console.log(req.body);
if (req.body.username !== "techx") res.json({ message: "user not found!" });
if (req.body.password !== "123") res.json({ message: "please check your password!" });
const payload = {
check: true
}
let token = jwt.sign(payload, app.get('Secret'), {
expiresIn: 14000
});
res.json({
message: 'authentication done',
token: token
});
});
이제 Postman으로 테스트를 해봅시다.
완벽한! 😃 방금 서버에 HTTP 요청을 보냈고 요청한 JWT로 응답했습니다. 지금은 클라이언트가 이미 토큰을 가지고 있습니다. 다음 단계로 넘어가자 - 경로 설정
const ProtectedRoutes = express.Router();
app.use('/api', ProtectedRoutes);
ProtectedRoutes.use((req, res, next) => {
let token = req.headers['access-token'];
console.log(token);
if (!token) res.send({ message: 'No token provided.' });
jwt.verify(token, app.get('Secret'), (err, decoded) => {
if (!err) { req.decoded = decoded; next(); }
return res.json({ message: 'invalid token' });
})
});
ProtectedRoutes.get('/getAllProducts', (req, res) => {
let products = [
{
id: 1,
name: "cheese"
},
{
id: 2,
name: "carottes"
}
]
res.json(products)
});
모든 작업이 완료되었으므로 이제 데이터를 가져오는 두 가지 다른 방법을 비교합니다.
토큰 없음
Reference
이 문제에 관하여(JSON Web Token: JWT를 이용한 RESTful API 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/developerminhvo/web-api-security-3ccf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)