좋은 프로그램은 마음의 여유에서 나온다.

node-oauth2-server로 oauth2 구현 본문

프로그래밍/node.js

node-oauth2-server로 oauth2 구현

좋은데이 2013. 9. 1. 12:52

설치


npm install node-oauth2-server --save


// 모듈 불러오기

var oauthserver = require('node-oauth2-server');


// express 미들웨어로 설정


//bodyParser필수


app.configure(function() {

  var oauth = oauthserver({

      model: require('./oauth/model'),    // oauth 2.0의 각종 인증 함수를 구현해 놓은 곳

      grants: ['password']

      allow: ['/', '/login'],   // 인증 없이 접근할 api 

      debug: true

  });

  app.use(express.favicon());

  app.use(express.logger('dev'));

  app.use(express.bodyParser());  // 필수

  app.use(express.methodOverride());

  app.use(express.cookieParser());

  app.use(oauth.handler());

  app.use(oauth.errorHandler());

  //app.use(express.session());

});


인증 api 인 /oauth/token 으로 아래의 request 전송


메소드 :POST

주소 : /oauth/token     // lib의 oauth2server.js에서 변경 가능

헤더

    Authorization : Basic 에 ' '을 추가한 후 (클라이언트ID:클라이언트시크릿)을 base64로 인코딩하여 추가

    Content-Type : application/x-www-form-urlencode

    Parameter : grant_type=password(oauthㅅㅐㅇ성시 grants:['password']부분에 설정, password일 경우 클라이언트 id와 secret 확인

username=유저이름

password=비밀번호


POST /oauth/token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded

grant_type=password&username=johndoe&password=A3ddj3w


요청을 하게되면 express의 미들웨어인 node-oauth2-server 모듈에서 아래의 체크 과정을 거치게 됨


  • getClient (clientId, clientSecret, callback)
  • grantTypeAllowed (clientId, grantType, callback)
  • getUser (username, password, callback)
  • saveAccessToken (accessToken, clientId, userId, expires, callback)
  • saveRefreshToken (refreshToken, clientId, userId, expires, callback) (if using)

각 함수들은 model.js에 정의함 모든 과정을 성공적으로 마치게 되면


HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
    "access_token":"2YotnFZFEjr1zCsicMWpAA",
    "token_type":"bearer",
    "expires_in":3600,
    "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
}


response가 가고 access_token을 이용해 각 api에 접근한다.


access_token은 만료시간(expires_in)을 가지고 있고, refresh_token을 이용해 access_token을 갱신해야 함


귀찮으면 생략?


참조 : https://github.com/nightworld/node-oauth2-server

http://oauth.net/2/

http://tools.ietf.org/html/rfc6749

'프로그래밍 > node.js' 카테고리의 다른 글

node.js npm 에러  (0) 2014.02.12
mongoose Trying to open unclosed connection.  (0) 2013.10.30
node.js + express + i18n + ejs로 다국어 지원  (0) 2013.08.23
http 서버 응답 코드  (0) 2013.08.09
파일에 로그 남기기  (0) 2012.09.11
Comments