1.1.15 • Published 6 years ago

@sungaoxiang/sso-mock-login v1.1.15

Weekly downloads
1
License
MIT
Repository
-
Last release
6 years ago

sso-mock-login项目

模拟单点登录模块(Single Sign On),单点登录简单说就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录。

我们一般在请求接口时会去请求接口服务器,而接口服务器则会去验证cookie。

若验证失败,则接口服务器会重定向到单点登录服务器(sso服务器)。

如:我们去访问接口服务器(http://api.com)时会被重定向到sso服务器(https://sso-server.com/login?service=http://api.com/cas&goto=http%3A%2F%2Fapi.com%2Findex)

这一串地址中:

若单点登录服务器已经登陆了,则单点登录服务器重定向接口服务器并携带一个ticket,然后接口服务器验证ticket并存储cookie。这样就我们就登陆了。

而若单点登录服务器没有登陆,则会返回单点登录页面,页面上会存在ltexecution两个参数。lt防止重复提交,execution保证走的同一个webflow流程。

获取了lt和execution之后,再加上我们自己的username和password就可以进行application/x-www-form-urlencoded的登陆了

上面说的有点乱,见谅~~。主要存在两类服务器,一、用于请求接口的接口服务器(业务务器),二、用于验证登陆的单点登录服务器(当店登陆务器)

Alt text

安装

npm i @xkeshi/sso-mock-login --save --registry=http://registry.fe.xkeshi.org

如何使用?

  1. 在服务端(通常为server/app.js)引入中间件

    createApp({
      middlewares: [
        // 引入单点登录中间件
        require('@xkeshi/sso-mock-login/src/koa-middleware')({ 
          url: '/api/mock/login/sso', // 选填,默认 /api/mock/login/sso,注意:这里配置的url要和下面vue中constants配置的保持一致
        })
      ],
    })
  2. 在Vue2中引入插件

    if (IS_DEBUG) {
      require(['@xkeshi/sso-mock-login/src/vue-plugin', '../constants'], (mockLogin, cfg) => {
        // 关于constants的配置在下面
        Vue.use(mockLogin, cfg.sso)
      })
    }
  3. 配置constants

    module.exports = {
      sso: {
        url: '/api/mock/login/sso',  // 选填,默认 /api/mock/login/sso,注意:这里配置的url要和下面vue中constants配置的保持一致
        prefix: '/api',  // 选填,默认 /api
        current: 'prepub', // 选填,当前选用的环境
        showAllAccount: false, // 选填,是否展示所有账户,默认显示全部,设为false则只展示当前选中的账户
        ssoHosts: { // 必填,动态切换环境时,会在请求参数中加入相应的ssoHost和apiHost
          dev: {
            ssoHost: 'https://sso.dev.xxx.net',
            apiCasUrl: 'http://api.dev.xxx.com:8080/cas'
          },
          test: {
            ssoHost: 'https://sso.test.xxx.net',
            apiCasUrl: 'http://api.test.xxx.com:8080/cas'
          },
          prepub: {
            ssoHost: 'https://sso.prepub.xxx.net',
            apiCasUrl: 'http://api.prepub.xxx.com:8080/cas'
          }
        },
        accounts: [{
           env: ['prepub'],
           type: 'admin',
           role: 'admin',
           username: 'admin',
           password: 'xxx'
         }, {
           env: ['prepub'],
           type: '代制',
           role: '代理商主账号',
           username: 'aaa',
           password: 'xxx'
         }]
      }
     }

例子

npm run dev

// 打开localhost:3999

其它

请关注后续新版本,3Q

sso-mock-login