2019년 3월 3일 일요일

Node.js & OAuth2 사용하여 Server 기능 구성

Node.js & OAuth2 사용하여 Server 기능 구성


1. OAuth2 란?

3자 인증 - 다른 서비스에서 토큰 발급

인증 처리
사용자 정보 암호화
보안 프로토콜의 사용

인증모듈 : passport, everyauth

authenticate
passport.serializeUser
passport.deserializeUser
req.user 사용자 정보

Local Auth
passport-local 모듈
var LocalStrategy = new LocalStrategy(Option, function(username, password, done) {})
passReqToCallback

done(null, USER-INFO)
done(null, false, FAILURE-INFO)


2. express용 OAuth Server 모듈 설치 및 테스트

express용 OAuth server 모듈을 설치한다.  OAuth2-Server 모듈을 express용으로 래핑한 것으로 express 서버에서 동작한다.

  • npm install express-oauth-server

설치 후 credential을 제공하는 방식에 따라 model에 getAccessToken등을 지정한다.
model에 OAuth에서 사용하는 명령어에 따라 작동 방식이 지정된다.
model에 대한 예제는 Github를 통해 확인할 수 있다.

3. Passport로 Local Auth 만들기

Local Auth를 만들기 위해서는 passport, passport-local 모듈을 설치해야 한다.


  • PS C:\ubuntu\node\oauth2svr\auth2> npm install express body-parser express-session passport passport-local --save

설치가 완료되면 다음과 같은 내용으로 node 프로그램을 작성한다.  프로그램 소스는 T Academy 동영상을 참조하였다. (90% 동일)

  • let express = require('express');
  • let bodyParser = require('body-parser');
  • let app = express();
  • app.use(bodyParser.urlencoded({extended:false}));

  • let session = require('express-session');
  • app.use(session({
  •   resave:false,
  •   saveUninitialized:false,
  •   secret:'Secret Key'
  • }));

  • let passport = require('passport');
  • app.use(passport.initialize());
  • app.use(passport.session());

  • let LocalStrategy = require('passport-local').Strategy;
  • let strategy = new LocalStrategy(function(username, password, done) {
  •   if (username==='user' && password === '1234') {
  •     let userinfo = {name:'사용자', email:"user@email.com"};
  •     done(null, userinfo);
  •   } else {
  •     done(null, false, '로그인 실패');
  •   }
  • });
  • passport.use(strategy);

  • passport.serializeUser(function(user, done) {
  •   console.log('세션에 기록하기');
  •   done(null, user);
  • });

  • passport.deserializeUser(function(user, done) {
  •   console.log('세션에서 사용자 정보 읽기');
  •   done(null, user);
  • });

  • app.post('/login', passport.authenticate('local'), (req,res) => { res.send('success')});
  • app.get('/personal', showPersonal);
  • app.listen(3000);

  • function showPersonal(req, res) {
  •   let user = req.user;
  •   if ( user ) {
  •     res.send('Personal Page ' + user.name + ' Email: ' + user.email);
  •   } else {
  •     res.sendStatus(401);
  •   }
  • }

node로 프로그램을 실행하면 아무런 메시지가 표시되지 않는다.  Postman을 이용하여 다음 사항을 테스트한다.

  • Get : Localhost:3000/personal 접속하여 결과 확인
  • Post: Localhost:3000/login username: user, password: 1234를 x-www-form-urlencorded 방식으로 접속하여 결과 확인





[참고 사이트]

https://velopert.com/2448 (Express.js 서버에서 JWT 기반 회원인증시스템 구현하기)
https://victorydntmd.tistory.com/116 (JsonWebToken 모듈 사용 JWT 기반 회원인증 구현하기)
https://nesoy.github.io/articles/2017-04/NodejsAuthentication (Node 인증 시스템 구현 Passport)
https://behonestar.tistory.com/37 (Token 기반 인증)
http://www.passportjs.org/docs/oauth2-api/ (Passport npm)
https://opentutorials.org/course/3387 (Node.js 쿠키와 인증)
http://scottksmith.com/blog/2014/07/02/beer-locker-building-a-restful-api-with-node-oauth2-server/ (Building a RESTful API with Node OAuth2  Server)
https://www.youtube.com/watch?v=Qn48RgkUuaA (Passport를 이용한 인증)
https://oauth2-server.readthedocs.io/en/latest/ (OAuth2 server 모듈 Document)
https://www.npmjs.com/package/express-oauth-server (express 모듈용 OAuth2 server 모듈)
https://blog.cloudboost.io/how-to-make-an-oauth-2-server-with-node-js-a6db02dc2ce7

댓글 없음:

댓글 쓰기