nodejs + express를 이용한 Google OAuth 연동
OAuth는 근간에 거의 모든 WebSite에서 사용되고 있는 인증방법입니다. 회원 가입절차를 빠르게 할 수 있으며, 개인정보에 대한 관리 이슈를 피할 수 있어, 많이들 사용되는 방법입니다. nodejs를 이용한 OAuth 인증 방법에 대해서 알아보도록 하겠습니다.
npm package 설치
npm install passport
npm install passport-google-oauth
npm install cookie-session
- passport: OAuth를 지원하기 위한 base package 입니다. twitter, facebook, google에서 지원하고 있는 OAuth를 모두 지원합니다.
- passport-google-oauth: passport를 기반으로 하는 google-oauth 지원 package입니다.
- cookie-session: express에서 session을 지원하기 위한 package입니다.
express-session
으로 대체해서 사용 가능합니다.
google auth api 설정
https://console.developers.google.com 에서 Google에서 제공하는 API를 이용하는 project를 생성할 수 있습니다. 새로운 project를 생성한 후, API 및 인증 > 사용자인증정보
에서 새클라이언트 ID 만들기
를 통해서 새로운 API를 만들어줍니다. 여기서 중요한 설정은 다음과 같습니다.
- 승인된 javascript 원본 : 인증을 요청할 url을 넣습니다. 개발자 환경인 http://localhost:3000 과 같은 표현 역시 가능합니다.
- 승인된 redirection URL : 인증이 완료된 후, redirect될 url을 넣어줍니다.
만들어진 웹어플리케이션용 Client ID에서 이제 3개의 정보는 우리가 작성할 application에서 사용해야지 됩니다.
- 클라이언트 ID
- 클라이언트 보안 비밀
- URI 리디렉션
Login uri handling
사용자가 OAuth를 통해서 인증될 URL을 설정합니다. express controller code에 해당되는 내용입니다.
module.exports = OAuthController;
function OAuthController(app) {
var passport = require('passport');
app.use(passport.initialize());
app.use(passport.session());
var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
passport.use(new GoogleStrategy({
clientID: '클라이언트 ID',
clientSecret: '클라이언트 보안 비밀',
callbackURL: 'URI 리다렉션'
},
function(accessToken, refreshToken, profile, done) {
return done(null, profile);
}));
app.get('/auth/google', passport.authenticate('google', {
scope: [
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/userinfo.email'
]
}));
app.get('/oauth2callback', passport.authenticate('google', {
successRedirect: '/auth/successed',
failureRedirect: '/auth/failure'
}));
app.get('/logout', function(req, res) {
req.logout();
req.session = null;
res.redirect('/');
});
};
Summary
Passport를 통해서 Google OAuth에 접근하는 방법은 많은 예시 code들이 있고, 거의 유사한 형태를 갖습니다. 위 controller code를 그대로 copy & paste로만도 간단히 Google OAuth를 구현 가능합니다.