基于node.js的sso(单点登录-客户端校验)

背景

由于公司内部已经写好一套cas系统,现有一个新的模块需要基于node并借助原cas系统实现访问控制。
本项目基于开源项目

https://github.com/TencentWSRD/connect-cas2
sso原理
快速开始
  • 安装环境
npm init -y
npm install connect-cas2 --save-dev
//需要node版本7.0及以上
  • 构建

新建一个js文件client.js写入

var express = require('express');
var ConnectCas = require('connect-cas2');
var bodyParser = require('body-parser');
var session = require('express-session');
var cookieParser = require('cookie-parser');
var MemoryStore = require('session-memory-store')(session);

var app = express();

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

var casClient = new ConnectCas({
  debug: true,
    ignore: [
      /\/ignore/
    ],
    match: [],
    servicePrefix: 'http://localhost:3000',
    serverPath: 'http://your-cas-server.com',
    paths: {
      validate: '/cas/validate',
      serviceValidate: '/buglycas/serviceValidate',
      proxy: '/buglycas/proxy',
      login: '/buglycas/login',
      logout: '/buglycas/logout',
      proxyCallback: '/buglycas/proxyCallback'
    },
    redirect: false,
    gateway: false,
    renew: false,
    slo: true,
    cache: {
      enable: false,
      ttl: 5 * 60 * 1000,
      filter: []
    },
    fromAjax: {
      header: 'x-client-ajax',
      status: 418
    }
});

app.use(casClient.core());

// NOTICE: If you want to enable single sign logout, you must use casClient middleware before bodyParser.
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);
});

安装所有的依赖包

npm install express body-parser express-session cooike-parser session-memory-store --save-dev
  • 配置参数
  name: 'NSESSIONID',
  secret: 'Hello I am a long long long secret',

26153902_lQQc.png

控制台中的application中的cooikes中的key、value填进去

  servicePrefix: 'http://localhost:3000',
  serverPath: 'http://your-cas-server.com',
  validate: '/cas/validate',

serverPath:填入cas服务的地址

validate: '/cas/validate':填入登录成功后的转跳地址

注意

报错:
1.express-session错误:

 express-session deprecated undefined resave option; provide resave option at client.js:14:9
 express-session deprecated undefined saveUninitialized option; provide saveUninitialized option at client.js:14:9\

在session中添加两个参数

app.use(session({
    name: 'xxx',
    secret: 'xxx',
    resave:true,//添加这行
    saveUninitialized: true,//添加这行
    store: new MemoryStore()  // or other session store
}));

2.cas错误

Application Not Authorized to Use CAS
The application you attempted to authenticate to is not authorized to use CAS.

将本服务的ip地址在服务端放过或者更改本地hosts文件变成CAS服务允许的ip地址。

转载于:https://my.oschina.net/u/2935389/blog/1624200

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js单点登录是指在Node.js环境中实现的单点登录功能。单点登录SSO)是指用户只需要登录一次,就可以在多个应用系统中访问所有相互信任的应用系统。在Node.js中实现单点登录可以通过与前端页面的配合来完成。 通常,单点登录的实现需要以下几个步骤: 1. 创建一个登录页面,用户在该页面输入用户名和密码进行登录。 2. 在Node.js服务器端使用一定的身份验证方式对用户进行认证,比如验证用户名和密码是否匹配等。 3. 认证成功后,服务器会为该用户生成一个认证凭证,并将该认证凭证存储在会话中。可以使用Redis等作为会话存储。 4. 服务器将认证凭证返回给前端页面,前端页面可以使用Cookie或者其他方式保存该认证凭证。 5. 当用户访问其他应用系统时,应用系统会向服务器发送认证凭证。 6. 服务器接收到认证凭证后,验证其有效性,如果有效则返回给应用系统用户的身份信息。 7. 应用系统使用该身份信息进行用户的认证和授权。 在Node.js中实现单点登录可以使用express框架,结合Redis作为会话存储。通过在服务器端验证用户的登录信息,并生成认证凭证,将认证凭证存储在会话中,从而实现单点登录的功能。 需要注意的是,单点登录的实现需要确保各个应用系统之间相互信任,且使用合适的身份验证方式来保护用户的信息安全。同时,应该考虑并处理可能出现的安全风险,比如跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等。 总结起来,Node.js单点登录是指在Node.js环境中通过验证用户的身份信息,并生成认证凭证,从而实现用户只需登录一次就可以访问多个应用系统的功能。通过使用express框架和Redis等作为会话存储,可以实现该功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值