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
댓글 없음:
댓글 쓰기