Node.js로 JWT 인증 이해하기

3240 단어
JSON 웹 토큰이란 무엇입니까?
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에서 성공적으로 확인 메시지를 받습니다.
해피 코드 라이프
아딜 라자

좋은 웹페이지 즐겨찾기