nodejs+express+passport-gitlab2를 사용하여 OAuth Application 만들기
소개
gitlab은 온프레로 독자적으로 구축하고 있습니다.
인증 만들기의 귀찮은. gitlab에서 좋다.
그래서 OpenID에서 인증 + OAuth로 허가도 할 수 있도록하자!
라고 프런트 엔드 초보자가 빠져들면서 실장한 기록입니다.
passport-gitlab2
이것입니다.
htps //w w. 음 pmjs. 코 m / 빠 c 가게 / 빠 s 포 rt-gi t b2
사전 준비
gitlab 측에서 연결 준비하십시오.
【Admin Area】→【Applications】에서 설정합니다.
결과
이렇게 된다.
우선 의존 정보의 추가.
required 추가
var passport = require('passport');
var session = require('express-session');
var GitLabStrategy = require('passport-gitlab2').Strategy;
그런 다음 세션 활성화를위한 정의 설명.
session 관리를 위한 설정
app.use(session({
secret: "secret-key",
resave: false,
saveUninitialized: false,
cookie: {
httpOnly: false,
secure: true,
maxage: 1000 * 60 * 30
}
}));
app.use(passport.initialize());
app.use(passport.session());
다음에, 인증하는 URL, 콜백 URL의 정의를 기재.
인증을 위한 설정
app.get('/', passport.authenticate('gitlab'));
app.get('/auth/gitlab/callback',
passport.authenticate('gitlab', {
failureRedirect: '/error.html'
}),
function (req, res) {
// Successful authentication, redirect home.
res.redirect('/home');
});
그리고, gitlab로부터의 인증시의 반환 처리와, deserialize/serialize 처리를 정의.
done
passport 관련 정의
//passport
passport.use(new GitLabStrategy({
clientID: process.env.GITLAB_APP_ID,
clientSecret: process.env.GITLAB_APP_SECRET,
callbackURL: process.env.GITLAB_CALLBACK,
baseURL: process.env.GITLAB_URL
},
function (accessToken, refreshToken, profile, done) {
if (profile) {
user = profile;
return done(null, { id: profile.id });
}
else {
return done(null, false);
}
}
));
passport.deserializeUser(function (id, done) {
console.log('Deserialize user called.');
return done(null, { "id": id });
});
passport.serializeUser(function (user, done) {
console.log('Serialize user called.');
return done(null, { id: user.id });
});
이후에는 각종 route에 대해 인증이 필수로 정의한다.
ensureAuthenticated에서 패스 스루하도록 변경
function ensureAuthenticated(req, res, next) {
console.log("ensureAuthenticated");
if (req.isAuthenticated())
return next();
else
res.redirect('/');
}
router.get('/home', ensureAuthenticated, function (req, res, next) {
res.send("OK");
})
빠진 곳
User is not defined
공식적으로 이렇게 쓰고 있기 때문에, 과연 과연. 좋아, 코피페다!
passport.use(new GitLabStrategy({
clientID: GITLAB_APP_ID,
clientSecret: GITLAB_APP_SECRET,
callbackURL: "http://localhost:3000/auth/gitlab/callback"
},
function(accessToken, refreshToken, profile, cb) {
User.findOrCreate({gitlabId: profile.id}, function (err, user) {
return cb(err, user);
});
}
));
움직여 보면 User is not defined.
와 움직이지 않습니다.
htps : // 기주 b. 코 m / 아 th0 / 팍 s 포 rt 우우 엔 w
무한한 인증 리디렉션 루프 발생
var session = require('express-session');
・・・
app.use(passport.session());
원래 session 사용하지 않으면 제대로 연계할 수 없어서 이야기.
어라? 인증하지 않아도 움직인다…
interceptor?적인 몬이 마음대로 해준다고 생각했지만, 해주지 않는다.
스스로 제대로 패스마다 설정해 주지 않으면!
※통상은, router를 확장하는 것일까-.
ensureAuthenticated에서 패스 스루하도록 변경//認証チェック
function ensureAuthenticated(req, res, next) {
console.log("ensureAuthenticated");
if (req.isAuthenticated())
return next();//認証チェックしてから、次を呼び出すよ。
else
res.redirect('/');
}
router.get('/home', ensureAuthenticated, function (req, res, next) {
res.send("OK");
})
뭔가... 생각한 화면과 다르다
OAuth는 그 구글과 같은 인증을 하고, "이 권한을 부여하지만 괜찮습니까?"화면이 나올 것인데, 나오지 않는다.
그냥 로그인 화면이 나올 뿐. 멋지다.
그렇지만, 뭐・・・이런 것일까라고 생각해 방치했습니다.
원래 passport 알 필요가 있다.
h tp // w w. 파스포 rtjs. 오 rg / 빠 c 게 s / 빠 s 포 rt-pm /
이것 전제로 움직인다. passport-gitlab2
는이 OAuth 서비스 공급자 라이브러리입니다.
그래서 원래 passport가 어떻게 움직이는지 알 필요가 있다.
Reference
이 문제에 관하여(nodejs+express+passport-gitlab2를 사용하여 OAuth Application 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/h-r-k-matsumoto/items/c7cea0347efca5e3f3c5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
passport.use(new GitLabStrategy({
clientID: GITLAB_APP_ID,
clientSecret: GITLAB_APP_SECRET,
callbackURL: "http://localhost:3000/auth/gitlab/callback"
},
function(accessToken, refreshToken, profile, cb) {
User.findOrCreate({gitlabId: profile.id}, function (err, user) {
return cb(err, user);
});
}
));
var session = require('express-session');
・・・
app.use(passport.session());
//認証チェック
function ensureAuthenticated(req, res, next) {
console.log("ensureAuthenticated");
if (req.isAuthenticated())
return next();//認証チェックしてから、次を呼び出すよ。
else
res.redirect('/');
}
router.get('/home', ensureAuthenticated, function (req, res, next) {
res.send("OK");
})
Reference
이 문제에 관하여(nodejs+express+passport-gitlab2를 사용하여 OAuth Application 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/h-r-k-matsumoto/items/c7cea0347efca5e3f3c5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)