单点登录,配置跨域代理

在路由守卫前置加免登录接口

router.beforeEach((to, from, next) => {
  NProgress.start() // start progress bar
  if (to.meta.title) {// 路由发生变化修改页面title 
    document.title = to.meta.title
  }
  if (Vue.ls.get(ACCESS_TOKEN)) {
    if (to.path === '/login') {
      next()
    } else  (to.query.xxxx) {
    ssoLogin(to.query).then(res => { // 通过获取query的token设置免登录
      if (res && res.status === 200) {
        const headers = res.headers
        Vue.ls.set(
          //本系统需要的token
          ACCESS_TOKEN,
          headers['authorization'],
          ACCESS_TOKEN_TIME
        )
        Vue.ls.set(
          //子系统免登录token
          'access_token',
          headers['access-token'],
          ACCESS_TOKEN_TIME
        )
        next({ path: to.path })
      }
    }).catch(err => {
      console.log('err: ', err.response || err)
      const message = err.response && err.response.data.detail
      vm.$notify({ type: 'warning', message: message || '用户权限验证失败。',duration:2000 })
      next({ name: 'accessDenied', query: {message: message || '用户权限验证失败。'} })
    })
  } else {
    if (whiteList.includes(to.name)) {
      // 在免登录白名单,直接进入
      next()
    } else {
       next({ path: '/login' })
    }
  }
  next()
})

vue.config.js文件配置代理

  devServer: {
    proxy: {// 免登录接口跨域
      '/ssoLogin': {
        //注:nginx需配置来解决404 ---> proxy_pass  http://1xx.x0.x0.xxx:8088/xx/xxx/xxxx; IP后面需跟target同步
        'target': 'http://1xx.xx.xx.xx:8081/xxx/xxx/xxxx, // oa访问我们免登录接口地址,将IP和端口改为访问后端的IP端口
        'secure': false, // false为http访问,true为https访问
        'changeOrigin': true, // 跨域访问设置,true代表跨域
        'pathRewrite': { // 路径改写规则
          '^/ssoLogin': ''
        }
      },
    }
  }

服务器nginx配置

server {
        listen       8081;
        server_name  xxx.x.xxx.xx;
        location /ssoLogin {   
          #proxy_pass IP ������� vue target����ͬ�� 
          proxy_pass  http:http://1xx.x0.x0.xxx:8088/xx/xxx/xxxx;
        }

先记录一下,nginx配置不太懂

当用户第一次访问web应用系统1的时候,因为还没有登录,会被引导到认证中心进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,返回给用户一个认证的凭据;用户再访问别的web应用的时候就会将这个Token带上,作为自己认证的凭据,应用系统接受到请求之后会把Token送到认证中心进行效验,检查Token的合法性。如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。所有应用系统共享一个身份认证系统。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志,返还给用户。另外,认证系统还应该对Token进行效验,判断其有效性。 所有应用系统能够识别和提取Token信息要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对Token进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。 比如说,我现在有3个分站点和1个认证中心(总站)。当用户访问分站点的时候,分站点会发Token到验证中心进行验证。验证中心判断用户是否已经登录。如果未登录,则返回到验证中心登录入口进行登录,否之则返回Token验证到分站点,直接进入分站点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值