一个基于 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

The MIT License


2 回复

一个基于 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 单点登录集成到你的应用中。

回到顶部