Node.js - OAuth,Nginx 기본 개념

ryan·2022년 5월 20일
0

OAuth(Open Authorization)

  • 서비스 제공자가 다른 서비스에게 데이터를 제공하기 위해 서비스 사용자에게 제공하는 사용자 인증방식의 표준

OAuth 동작 방식

  • 서비스 제공자에게 인증 요청
  • 인증 완료 후 사용자 정보를 요청한 서비스로 전달
  • 인증 정보를 이용해 서비스 제공자의 데이터 사용

OAuth 사용 예시

구글 캘린더 연동 서비스

  • 구글 OAuth 인증 요청
  • 인증된 OAuth Token을 기록
  • OAuth Token을 사용하여 구글 캘린더 API 사용

OAuth와 로그인

  • OAuth는 사용자의 인증을 제공하는 표준
  • 이를 활용하여 로그인 기능을 간편하게 구성할 수 있음
  • 웹 서비스 제공자는 아이디, 비밀번호 로그인을 구현할 필요 없음
  • 웹 서비스 사용자는 로그인 시 아이디, 비밀번호를 입력할 필요 없음

구글 로그인 구현 순서

  • 구글 클라우드 플랫폼 프로젝트 생성
  • API 및 서비스 > OAuth 동의화면 설정
  • 사용자 인증정보 > OAuth 클라이언트 id 만들기
  • passport-google-oauth20 연동

passport-google-oauth20

  • passport-strategy 인터페이스의 구글 로그인 구현체
  • OAuth 인증을 구현하기 위해서는 인증 요청, 데이터 수신 등의 복잡한 작업 필요
  • passport-google-oauth20는 간단하게 구현 가능
const passport = require('passport');
const router = require('../../express/express/routes');

// 구글 로그인이 완료된 후 결과를 전달받는 부분
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const config = {
// OAuth 클라이언트 설정값 및 완료 결과를 전달받을 callbackURL을 config로 설정
  clientID: 'clientID',
  clientSecret: 'clientSecret',
  callbackURL: 'callbackUrl', // 구글 로그인이 완료되면 다시 서비스로 돌아와야 하는데 그 서비스 url임
};
//accessToken, refreshToken은 다른 구글 API들을 사용하기 위한 토큰
new GoogleStrategy(config, (accessToken, refreshToken, profile, done) => {
// profile은 전달받은 유저 정보. 이를 이용해 유저를 생성하거나 OAuth 정보를 업데이트 함.
  const {email, name} = profile._json;
});

authenticate

  • auth/google 접근 시 자동으로 구글 로그인 페이지로 넘어감
  • 로그인 완료 후 로그인 정보를 /auth/google/callback으로 전달해 줌
  • 전달받은 데이터는 strategy에서 처리
  • 처리가 완료되면 request handler 실행
passport.use(google);
router.get(
  '/google',
  passport.authenticate('google', {
    scope: ['profile', 'email'],
  })
);
router.get('/google/callback', passport.authenticate('google', {failureRedirect: '/login'}), (req, res, next) => {
  res.redirect('/');
});

// 구글 로그인
// /auth/google로 link시 passport가 자동으로 구글 로그인 페이지로 이동
// 로그인 결과를 /auth/google/callback으로 전달해 줌
td: a((href = '/auth/google'));

nginx

  • 최근 신규 프로젝트에서 가장 많이 채택되고 있는 웹 서버 소프트웨어
  • 웹 서버 소프트웨어? http 요청을 받아 파일이나 실행 결과를 http 응답으로 보내주는 소프트웨어

nginx를 사용하는 이유

  • java tomcat / php-fastcgi 등 다른 언어가 http 요청을 처리를 위한 의존성이 있는 것에 반해,
  • Node.js는 기본적으로 http 요청을 수신하고 응답하는 기능이 이미 있음 > 웹 서버 소프트웨어 없이도 스스로 동작 가능
  • 하지만 https, 도메인 연결, static file caching 등의 기능을 사용하기 위해 nginx 같은 웹 서버 소프트웨어는 필수
    • nodejs 단독으로 production-level 서비스를 구축할 수는 없음

nginx + node.js

  • nginx의 reverse-proxy라는 기능을 사용해 node.js와 ngnix를 연결할 수 있음
  • reverse-proxy는 http 요청을 다른 서버에 전달하는 기능
  • nginx가 http 요청을 받아, 설정된 내용에 해당하는 요청만 node.js로 전달
profile
프론트엔드 개발자

0개의 댓글