Express.js에서 Passport 인증 전략 사용 이유

Chaeyoung·2023년 10월 15일
1

Express.js에서 Passport 인증 전략 사용 이유

express.js에서 사용자 인증은 웹 애플리케이션에서 사용자를 식별하고 인가된 사용자만이 특정한 리소스 또는 기능에 접근할 수 있도록 하는 핵심 보안 요소 중 하나다. 이런 사용자 인증을 간단하고 효과적으로 구현하기 위해 Passport 인증 전략을 사용하는 것은 권장되는 방법 중 하나이다.

1. Passport.js의 역할

Passport.js는 Node.js 기반의 웹 애플리케이션에서 사용자 인증을 구현하기 위한 강력하고 유연한 미들웨어다. 이 패키지는 다양한 인증 전략(예: 로컬, 소셜 미디어, OAuth 등)을 제공하며 Express.js와 함께 원활하게 통합됩니다. Passport.js를 사용하면 사용자 인증과 인가를 빠르게 구현할 수 있으며, 안전한 방식으로 사용자 정보를 처리할 수 있다.

2. 왜 Passport 인증 전략이 필요한가?

  • 보안 강화: 웹 애플리케이션은 사용자 데이터를 다루고 중요한 작업을 수행한다. 사용자 인증을 통해 악의적인 접근을 방지하고 사용자 데이터를 보호할 수 있다.

  • 사용자 경험 향상: 사용자는 로그인을 통해 개인화된 경험을 얻을 수 있다. Passport를 사용하면 간단한 로그인 절차를 통해 사용자를 식별할 수 있으며, 이를 통해 사용자 경험을 향상시킬 수 있다.

  • 다양한 인증 방법 지원: Passport는 로컬, 소셜 미디어, OAuth, OpenID 및 기타 다양한 인증 전략을 지원한다. 이를 통해 웹 애플리케이션은 다양한 인증 수단을 통합할 수 있다.

  • 코드의 단순화: Passport를 사용하면 인증 및 세션 관리와 관련된 복잡한 부분을 간단하게 처리할 수 있으므로, 코드의 가독성 및 유지보수성을 향상시킨다.

Passport 인증 전략은 Express.js 기반의 웹 애플리케이션에서 사용자 인증과 관련된 많은 문제를 해결하며, 보안과 사용자 경험을 개선하는데 큰 도움을 준다. 따라서 Passport를 통한 인증 전략의 구현은 모든 Express.js 개발자에게 권장되는 절차 중 하나다. Express.js와 Passport.js를 함께 사용하여 사용자 인증을 효과적으로 구현하고 웹 애플리케이션의 보안성을 강화할 수 있다.

아래에서 간단하게 로컬 인증 전략을 알아보자

passport로 localStrategy 구현하기

로컬 인증 전략은 사용자가 아이디와 패스워드를 사용하여 로그인하고 웹 애플리케이션에서 인증을 수행하는 가장 기본적인 Passport 전략 중 하나다. 이것은 웹 애플리케이션의 사용자 인증을 구현하는 데 주로 사용된다.

  1. 설치 및 설정:
    Passport와 관련된 패키지를 설치하고 Express 애플리케이션에 Passport를 설정한다.

    const express = require('express');
    const passport = require('passport');
    const LocalStrategy = require('passport-local').Strategy;
    const app = express();
    
    // Express 애플리케이션 설정 및 미들웨어 추가
    app.use(express.urlencoded({ extended: true })); // POST 요청에서 req.body를 사용할 수 있도록 함
    app.use(require('express-session')({ secret: '비밀키', resave: false, saveUninitialized: false }));
    app.use(passport.initialize());
    app.use(passport.session());
  2. 사용자 모델 정의:
    사용자 모델(예: MongoDB 또는 MySQL에서 가져온 사용자 정보)을 정의한다.

    const users = [
      { id: 1, username: '사용자명', password: '비밀번호' }
    ];
  3. 패스포트 전략 설정:
    Passport의 로컬 전략을 설정한다.

    passport.use(new LocalStrategy((username, password, done) => {
      const user = users.find((u) => u.username === username);
    
      if (!user || user.password !== password) {
        return done(null, false, { message: '인증 실패' });
      }
    
      return done(null, user);
    }));
  4. 세션 serializeUser 및 deserializeUser:
    Passport가 사용자를 세션에 저장하고 가져오기 위해 serialization 및 deserialization 메서드를 정의한다.

    passport.serializeUser((user, done) => {
      done(null, user.id);
    });
    
    passport.deserializeUser((id, done) => {
      const user = users.find((u) => u.id === id);
      done(null, user);
    });
  5. 로그인 및 라우팅:
    로그인 및 로그아웃 라우트를 정의하고 Passport를 사용하여 사용자 인증을 처리한다.

    app.post('/login',
      passport.authenticate('local', {
        successRedirect: '/dashboard',
        failureRedirect: '/login',
        failureFlash: true
      })
    );
    
    app.get('/logout', (req, res) => {
      req.logout();
      res.redirect('/');
    });
  6. 보안성 강화:
    비밀번호 저장 및 다른 보안 관련 사항에 대해 신경을 써서 보안성을 강화한다.

    이것은 로컬 인증 전략을 간략하게 설명한 것이며, 더 많은 세부 정보와 실제 데이터베이스와 연동하는 방법을 구현하려면 해당 데이터베이스와 연동 방법에 대한 설정을 추가해야 한다. 이로써 사용자는 아이디와 비밀번호를 사용하여 웹 애플리케이션에 로그인하고, Passport.js를 사용하여 사용자의 인증을 수행하게 된다.

끝!

0개의 댓글