基於node.js的sso(單點登陸-客戶端校驗)

背景

因爲公司內部已經寫好一套cas系統,現有一個新的模塊須要基於node並藉助原cas系統實現訪問控制。
本項目基於開源項目node

https://github.com/TencentWSRD/connect-cas2

sso原理

快速開始

  • 安裝環境
npm init -y
npm install connect-cas2 --save-dev
//須要node版本7.0及以上
  • 構建

新建一個js文件client.js寫入git

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);
});

安裝全部的依賴包github

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',

控制檯中的application中的cooikes中的key、value填進去ajax

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

serverPath:填入cas服務的地址express

validate: '/cas/validate':填入登陸成功後的轉跳地址npm

注意

報錯:
1.express-session錯誤:json

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中添加兩個參數cookie

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

2.cas錯誤session

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

將本服務的ip地址在服務端放過或者更改本地hosts文件變成CAS服務容許的ip地址。app

相關文章
相關標籤/搜索