좋은 프로그램은 마음의 여유에서 나온다.
node-oauth2-server로 oauth2 구현 본문
설치
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)
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 |