一个基于 passport 的 cas 扩展(Nodejs版)
一个基于 passport 的 cas 扩展(Nodejs版)
https://github.com/sadne/passport-cas
passport-cas
Cas authentication strategies for Passport.
Install
$ npm install passport-cas
Configure Strategy
passport.use(new (require('passport-cas').Strategy)({
ssoBaseURL: 'http://www.example.com/',
serverBaseURL: 'http://localhost:3000'
}, function(login, done) {
User.findOne({login: login}, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, {message: 'Unknown user'});
}
return done(null, user);
});
}));
Authenticate Requests
passport.authenticate('cas', function (err, user, info) {
if (err) {
return next(err);
}
if (!user) {
req.session.messages = info.message;
return res.redirect(’/’);
}
req.logIn(user, function (err) {
if (err) {
return next(err);
}
req.session.messages = '';
return res.redirect('/');
});
})
For example:
// GET: '/cas_login'
exports.casLogin = function(req, res, next) {
passport.authenticate('cas', function (err, user, info) {
if (err) {
return next(err);
}
if (!user) {
req.session.messages = info.message;
return res.redirect('/');
}
req.logIn(user, function (err) {
if (err) {
return next(err);
}
req.session.messages = '';
return res.redirect('/');
});
})(req, res, next);
};
License
一个基于 passport 的 cas 扩展(Nodejs版)
简介
本文将介绍如何使用 passport-cas
扩展来实现基于 CAS(Central Authentication Service)的认证策略。CAS 是一种广泛使用的单点登录(SSO)协议,用于安全地验证用户身份。
安装
首先,你需要安装 passport-cas
模块:
$ npm install passport-cas
配置策略
接下来,你需要配置 passport-cas
策略。以下是一个简单的示例:
const passport = require('passport');
const passportCas = require('passport-cas');
// 配置 CAS 策略
passport.use(new passportCas.Strategy({
ssoBaseURL: 'http://www.example.com/cas',
serverBaseURL: 'http://localhost:3000'
}, function(login, done) {
// 在数据库中查找用户
User.findOne({ login: login }, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { message: 'Unknown user' });
}
return done(null, user);
});
}));
在这个配置中:
ssoBaseURL
是 CAS 服务的基础 URL。serverBaseURL
是你的应用服务器的基础 URL。
认证请求
你可以通过 passport.authenticate
方法来处理认证请求。以下是一个示例:
app.get('/cas_login', passport.authenticate('cas'), function (req, res, next) {
if (!req.user) {
req.session.messages = 'Authentication failed';
return res.redirect('/');
}
req.logIn(req.user, function (err) {
if (err) {
return next(err);
}
req.session.messages = '';
return res.redirect('/');
});
});
在这个示例中:
passport.authenticate('cas')
会处理 CAS 认证流程。- 如果认证失败,用户会被重定向到主页,并显示相应的消息。
- 如果认证成功,用户信息会被保存到会话中,并重定向到主页。
示例代码
以下是完整的示例代码,包括路由定义:
const express = require('express');
const passport = require('passport');
const passportCas = require('passport-cas');
const User = require('./models/User'); // 假设你有一个 User 模型
// 初始化 Passport
app.use(passport.initialize());
app.use(passport.session());
// 配置 CAS 策略
passport.use(new passportCas.Strategy({
ssoBaseURL: 'http://www.example.com/cas',
serverBaseURL: 'http://localhost:3000'
}, function(login, done) {
User.findOne({ login: login }, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { message: 'Unknown user' });
}
return done(null, user);
});
}));
// 路由定义
app.get('/cas_login', passport.authenticate('cas'), function (req, res, next) {
if (!req.user) {
req.session.messages = 'Authentication failed';
return res.redirect('/');
}
req.logIn(req.user, function (err) {
if (err) {
return next(err);
}
req.session.messages = '';
return res.redirect('/');
});
});
// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
以上代码展示了如何配置和使用 passport-cas
来实现基于 CAS 的认证流程。希望对你有所帮助!
基于 passport-cas
的 CAS 扩展可以帮助你在 Node.js 应用中实现单点登录功能。下面是具体步骤及代码示例。
安装
首先需要安装 passport-cas
包:
npm install passport-cas
配置策略
接下来,配置 CAS 策略:
const passport = require('passport');
const CasStrategy = require('passport-cas').Strategy;
passport.use(new CasStrategy(
{
ssoBaseURL: 'http://www.example.com/cas',
serverBaseURL: 'http://localhost:3000',
},
function (login, done) {
// 这里处理用户验证逻辑
User.findOne({ login }, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { message: 'Unknown user' });
}
return done(null, user);
});
}
));
处理认证请求
接下来,在路由中处理认证请求:
// GET: '/cas_login'
exports.casLogin = function (req, res, next) {
passport.authenticate('cas', function (err, user, info) {
if (err) {
return next(err);
}
if (!user) {
req.session.messages = info.message;
return res.redirect('/');
}
req.logIn(user, function (err) {
if (err) {
return next(err);
}
req.session.messages = '';
return res.redirect('/dashboard'); // 认证成功后跳转到 dashboard 页面
});
})(req, res, next);
};
路由定义
定义相应的路由处理函数:
app.get('/cas_login', exports.casLogin);
总结
以上代码展示了如何使用 passport-cas
模块来集成 CAS 单点登录到你的 Node.js 应用中。首先配置 CAS 策略,然后在路由中调用 passport.authenticate
方法来处理用户的认证请求。通过这种方式,你可以方便地将 CAS 单点登录集成到你的应用中。