CAS 5.3 对接 NODE客户端

修改配置文件

为了使得CAS可以和客户端对接,首先需要修改配置文件。

  • 如果客户端使用的是http而不是https,需要修改tomcat/webapps/cas下的 \WEB-INF\classes\services\HTTPSandIMAPS-10000001.json
"serviceId" : "^(https|imaps)://.*" ==> "serviceId" : "^(https|http|imaps)://.*",
  • 如果以上步骤不生效则还需要修改 tomcat/webapps/cas 下的项目配置文件 \WEB-INF\classes\application.properties ,增加以下配置项。
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

安装npm包

使用 connect-cas2 ,在项目中运行以下命令安装npm包。

npm install connect-cas2 --Save

编写客户端

参考 https://github.com/TencentWSRD/connect-cas2/blob/master/README.zh.md

使用webstorm新建一个Node项目,更改app.js为以下代码。

重点代码在两行长注释之间。

// **************** CAS CLIENT DECLARE BEGIN ****************
...
// **************** CAS CLIENT DECLARE END ****************

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// **************** CAS CLIENT DECLARE BEGIN ****************
var session = require('express-session'); // 用于操作Session
var ConnectCas = require('connect-cas2'); // 用于实现CAS客户端
var bodyParser = require('body-parser');
var MemoryStore = require('session-memory-store')(session); // 用于为Session提供缓存

// 初始化CAS客户端
var casClient = new ConnectCas({
    debug: true,
    ignore: [
        /\/ignore/
    ],
    match: [],
    serverPath: 'https://cas.top:8443',
    servicePrefix: 'http://localhost:3000', // 本地服务推荐写localhost,写127.0.0.1会出现异常
    paths: {
        proxy: null, // 若不开启代理,需要手动赋值为null
        proxyCallback: null, // 若不开启代理,需要手动赋值为null
        validate:'/validate',
        login: '/cas/login',
        logout: '/cas/logout',
        serviceValidate: '/cas/serviceValidate'
    },
    redirect: false,
    gateway: false,
    renew: false,
    slo: true,
    restletIntegration: null, // 不添加此属性会有警告,官方文档未说明
    cache: {
        enable: false,
        ttl: 5 * 60 * 1000,
        filter: []
    },
    fromAjax: {
        header: 'x-client-ajax',
        status: 418
    }
});
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; // 不添加此属性运行有异常,官方文档未说明

app.use(session({
    name: 'NSESSIONID',
    secret: 'Hello I am a long long long secret',
    store: new MemoryStore()  // or other session store
}));

app.use(casClient.core());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.get('/logout', casClient.logout());

// or do some logic yourself
app.get('/logout', function(req, res, next) {
    // Do whatever you like here, then call the logout middleware
    casClient.logout()(req, res, next);
});
// **************** CAS CLIENT DECLARE END ****************


// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

测试

在浏览器输入应用的地址,此处为http://127.0.0.1:3000

自动跳转到CAS的登入界面。

输入用户名密码,登入。

自动跳转到应用。

### CAS 5.3 客户端配置教程 #### 配置概述 Apereo CAS 是一种广泛使用的单点登录解决方案,支持多种客户端集成方式。对于 CAS 5.3客户端配置,主要涉及以下几个方面:项目初始化、依赖管理以及服务注册。 --- #### 1. 初始化 CAS 客户端项目 在开始配置之前,需要创建一个新的 Maven 或 Gradle 项目作为客户端应用的基础环境。以下是基于 Maven 的示例: ```xml <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- CAS Client Core Dependency --> <dependency> <groupId>org.jasig.cas.client</groupId> <artifactId>cas-client-core</artifactId> <version>3.6.1</version> </dependency> </dependencies> ``` 上述代码片段展示了如何引入 `cas-client-core` 依赖[^3],这是实现 CAS 协议的核心库。 --- #### 2. 修改 Web 应用程序的配置文件 为了使客户端能够与 CAS Server 正常交互,需调整应用程序中的过滤器设置。通常情况下,在 Java EE 中可以通过 `web.xml` 文件完成此操作;而在现代框架(如 Spring Boot)中,则通过编程方式进行配置。 ##### 基于 XML 的配置方法 如果使用传统的 Servlet API,可以在 `web.xml` 中定义以下内容: ```xml <filter> <filter-name>CAS Single Sign Out Filter</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Single Sign Out Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Authentication Filter --> <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> </listener> ``` 该部分实现了单点登出功能并监听会话状态变化。 ##### 基于 Spring Boot 的自动配置 当采用 Spring Boot 构建时,推荐利用 Java Config 替代静态 XML 描述符的方式。下面是一个简单的例子: ```java import org.jasig.cas.client.authentication.AuthenticationFilter; import org.jasig.cas.client.session.SingleSignOutFilter; @Configuration public class CasClientConfig { @Bean public SingleSignOutFilter singleSignOutFilter() { final SingleSignOutFilter filter = new SingleSignOutFilter(); filter.setCasServerUrlPrefix("https://your-cas-server-url/cas"); return filter; } @Bean public AuthenticationFilter authenticationFilter() throws Exception { final AuthenticationFilter authFilter = new AuthenticationFilter(); authFilter.setCasServerLoginUrl("https://your-cas-server-url/cas/login"); authFilter.setServerName("http://localhost:8080"); // Your client app URL return authFilter; } } ``` 这段代码动态设置了 CAS 登录页面链接和服务名称等参数。 --- #### 3. 调整 CAS Server 的服务注册表 为了让 CAS Server 接受来自特定客户端的应用请求,必须更新其服务注册表。默认路径位于 Tomcat 的部署目录下 `\WEB-INF\classes\services` 文件夹内。 假设目标客户端允许 HTTP 和 HTTPS 请求,则编辑对应的 JSON 文件(例如 `HTTPSandIMAPS-10000001.json`),将其内容更改为如下形式: ```json { "@class": "org.apereo.cas.services.RegexRegisteredService", "serviceId": "^(https|http|imaps)://.*", "name": "HTTP and IMAP Service", "id": 10000001, "description": "Allows both secure (HTTPS) and insecure (HTTP) connections." } ``` 此外,还需确认是否存在额外的安全约束条件影响 TGC Cookie 行为。此时可在全局属性文件 `\WEB-INF\classes\application.properties` 添加以下条目以放宽限制[^4]: ```properties cas.tgc.secure=false cas.serviceRegistry.initFromJson=true ``` 这两项分别控制 Ticket Granting Cookies 是否强制加密传输以及是否启用 JSON 格式的初始加载机制。 --- #### 4. 测试连接 完成所有必要的更改之后,启动 CAS Server 及测试客户端实例,并验证两者之间的通信流程是否顺畅无误。具体步骤可能因实际场景而异,但一般包括访问保护资源触发重定向至认证入口点的过程。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值