[nodejs] REST API를 위한 토큰 인증 처리

웹 및 모바일 애플리케이션을 개발할 때 REST API를 사용하여 서버와 통신하는 경우, 토큰 기반의 인증 방식을 사용하는 것이 일반적입니다. 이 방식은 사용자의 인증 정보를 안전하게 전달하고, 추후의 요청에서 이를 사용하여 사용자를 인증하는 데에 효과적입니다.

토큰 인증의 개요

토큰 인증 방식은 사용자가 인증되면 서버에서 액세스 토큰을 발급하여 클라이언트에게 전달합니다. 이후의 모든 요청은 이 액세스 토큰을 함께 전달하여 서버에서 요청을 인증하게 됩니다. 이를 통해 세션 상태를 서버에 유지할 필요가 없어지며, 서버에서는 토큰의 유효성을 검증하기만 하면 되는 장점이 있습니다.

Node.js를 사용한 토큰 인증 구현

Node.js를 사용하여 REST API를 개발하는 경우, jsonwebtoken 패키지를 사용하여 토큰을 만들고 express 프레임워크를 사용하여 토큰을 확인하는 논리를 작성할 수 있습니다.

아래는 jsonwebtoken 패키지를 사용하여 토큰을 만드는 예시 코드입니다.

const jwt = require('jsonwebtoken');
const secretKey = 'mysecretkey';

const user = {
  id: 123,
  username: 'exampleuser'
};

const token = jwt.sign(user, secretKey, { expiresIn: '1h' });

그리고 아래의 코드는 클라이언트로부터 받은 토큰이 유효한지를 확인하는 예시 코드입니다.

const jwt = require('jsonwebtoken');
const secretKey = 'mysecretkey';

function verifyToken(req, res, next) {
  const token = req.headers['x-access-token'];

  jwt.verify(token, secretKey, (err, decoded) => {
    if (err) {
      return res.status(401).json({ message: '유효하지 않은 토큰입니다.' });
    }
    req.decoded = decoded;
    next();
  });
}

위 코드에서는 클라이언트로부터 받은 토큰이 x-access-token 헤더를 통해 전달된 것으로 가정하고 있습니다.

결론

Node.js를 사용하여 REST API를 개발할 때는 토큰 기반의 인증 방식을 사용하는 것이 안전하고 효과적입니다. jsonwebtoken 같은 패키지를 활용하여 토큰을 생성하고 확인하는 과정을 알고 있으면 보다 안전한 인증 시스템을 구축할 수 있습니다.

자세한 내용은 jsonwebtoken 공식 문서를 확인하세요.