Node.js로 JWT 인증 이해하기
JWT는 검증 가능하고 JWT를 사용하면 HTTP 요청을 통해 토큰을 쉽게 전송할 수 있는 JSON 개체로 당사자 간에 정보를 전송하는 표준적이고 안전한 방법입니다.
JWT는 주로 인증에 사용됩니다. 사용자가 애플리케이션에 로그인하면 애플리케이션이 해당 사용자에게 JWT 토큰을 할당합니다. 사용자가 요청할 때마다 할당된 JWT 토큰이 포함됩니다. 이 토큰은 사용자가 액세스할 수 있는 경로, 서비스 및 리소스를 서버에 알려줍니다.
JWT의 구조
헤더 — 토큰 유형(예: JWT)과 서명 알고리즘(예: HS512) 헤더의 두 부분으로 구성됩니다.
페이로드 — 토큰 만료 시간 페이로드와 같은 기타 정보와 함께 인증된 사용자에 대한 정보를 제공하는 클레임을 포함합니다.
서명 — 알고리즘 및 비밀과 함께 인코딩된 헤더 및 페이로드를 래핑하는 토큰의 마지막 부분입니다.
노드 JS로 JWT 구현
이 튜토리얼을 진행하기 전에 익스프레스 프레임워크에 대한 지식이 있어야 합니다. Here's Link
참고로.
프로젝트 디렉터리에 index.js라는 파일을 만듭니다. 이것은 작업을 단순하게 유지하기 위해 이 프로젝트에서 만들고 작업하는 유일한 파일입니다. 우리의 주요 목표는 Node.js 애플리케이션에서 JWT가 어떻게 작동하는지 이해하는 것입니다.
따라서 이 파일에서 각 코드 스니펫이 수행하는 작업을 이해해 보겠습니다.
응용 프로그램에 필요한 두 개의 모듈(express 및 JWT)을 가져오고 있습니다. 명령줄에서 npm i express jsonwebtoken --save 명령으로 두 모듈을 모두 설치할 수 있습니다. 그런 다음 index.js 파일에 아래 코드 👇를 붙여넣으세요.
const express = require("express");
const jwt = require("jsonwebtoken");
const app = express();
app.use(express.json())
이제 우리는 토큰을 생성하는 데 도움이 될 express로 post 메소드를 작성할 것입니다.
app.post("/api/login", (req, res, next) => {
const user = {
id: 1,
username: "john",
email: "[email protected]"
};
const password = '*******'
if(user.username === req.body.username && password === req.body.password) {
jwt.sign({ user: user }, "secretkey", (err, token) => {
res.cookie('token',token);
res.status(200).json(
"Auth successful"
);
});
}
else {
res.status(401).json('Unauthorized client')
}
});
// server running
app.listen(process.env.PORT || 3000, () => {
console.log("Server started with express..");
});
! 이 명령 노드 index.js를 사용하여 index.js 파일을 실행하는 것을 잊지 마십시오.
설명
sign() 메서드를 사용하여 해당 사용자에 대한 JSON 웹 토큰을 만들고 토큰을 JSON 문자열 형식으로 반환합니다. 이제 이 URLhttp://localhost:8000/api/login의 우편 배달부를 통해 요청할 수 있으며 토큰은 쿠키에 저장됩니다.
토큰을 받았는지 확인하려면 우편 배달부를 확인하고 우편 배달부를 열고 오른쪽 상단에서 쿠키를 클릭하면 토큰을 얻을 수 있습니다 👇
토큰을 클릭하여 확장할 수 있습니다.
마지막으로 토큰 확인 프로세스를 처리하는 verifyToken()을 사용하여 또 다른 post 메서드를 정의합니다. 구현 방법을 알아보겠습니다.
app.post("/api/post/verify", (req, res) => {
let token = req.headers.cookie.split("=")[1]
jwt.verify(token, "secretkey", (err, authData) => {
if (err) {
res.sendStatus(403);
} else {
res.json({
message: "verify successfully.",
authData
});
}
});
});
http://localhost:8000/api/post/verify 요청하다
설명
우리는
req.cookies.split("=")[1]
또는 토큰을 얻는 가장 간단한 방법에서 이것을 사용NPM cookie-parser한 다음 토큰 변수에 저장하고 .verify() 메서드를 사용하여 이전 요청에서 할당한 토큰을 확인합니다.토큰이 유효한 경우 우편 배달부 또는 403에서 성공적으로 확인 메시지를 받습니다.
해피 코드 라이프
아딜 라자
Reference
이 문제에 관하여(Node.js로 JWT 인증 이해하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aadilraza339/understanding-jwt-authentication-with-node-js-ld3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)