当前位置:首页 > VUE

vue实现单点

2026-01-12 09:11:04VUE

Vue 实现单点登录(SSO)方案

单点登录(SSO)允许用户通过一次登录访问多个系统。以下是基于 Vue 的实现方案:

基于 OAuth2/OpenID Connect 的实现

使用 oidc-client-js 库处理认证流程:

import { UserManager, WebStorageStateStore } from 'oidc-client'

const config = {
  authority: 'https://sso-provider.com',
  client_id: 'vue-app-client-id',
  redirect_uri: `${window.location.origin}/callback`,
  response_type: 'code',
  scope: 'openid profile',
  userStore: new WebStorageStateStore({ store: localStorage })
}

const userManager = new UserManager(config)

// 登录跳转
userManager.signinRedirect()

// 处理回调
userManager.signinRedirectCallback().then(user => {
  console.log('登录成功:', user.profile)
})

基于 JWT 的跨域方案

  1. 主域设置共享 Cookie

    axios.post('https://auth-server.com/login', credentials, {
    withCredentials: true // 允许跨域带cookie
    })
  2. 子应用验证 Token

    // 拦截器添加Token
    axios.interceptors.request.use(config => {
    const token = localStorage.getItem('sso_token')
    if (token) config.headers.Authorization = `Bearer ${token}`
    return config
    })

基于 iframe 的父窗口通信

主应用维护登录状态,子应用通过 postMessage 同步:

// 主应用
window.addEventListener('message', event => {
  if (event.data.type === 'SSO_CHECK') {
    event.source.postMessage({
      type: 'SSO_STATUS',
      loggedIn: store.state.user.isAuthenticated
    }, event.origin)
  }
})

// 子应用
const checkLogin = () => {
  window.parent.postMessage({ type: 'SSO_CHECK' }, '*')
  window.addEventListener('message', event => {
    if (event.data.type === 'SSO_STATUS') {
      console.log('登录状态:', event.data.loggedIn)
    }
  })
}

服务端渲染(SSR)特殊处理

Nuxt.js 中需注意服务端 token 传递:

// plugins/sso.js
export default async ({ app, req }) => {
  if (process.server) {
    const token = req.headers.cookie?.match(/sso_token=([^;]+)/)?.[1]
    if (token) app.$axios.setToken(token, 'Bearer')
  }
}

安全注意事项

  • 始终使用 HTTPS
  • 设置合理的 token 过期时间
  • 实现 CSRF 防护
  • 敏感操作需二次验证
  • 定期轮换加密密钥

调试技巧

开发时可使用代理解决跨域:

// vue.config.js
module.exports = {
  devServer: {
    proxy: {
      '/auth': {
        target: 'https://sso-server.com',
        changeOrigin: true
      }
    }
  }
}

以上方案可根据实际业务需求组合使用,建议优先采用标准协议如 OAuth2。实施时需确保各系统间的信任域配置正确,并做好会话管理。

vue实现单点

标签: 单点vue
分享给朋友:

相关文章

vue实现静态查询

vue实现静态查询

Vue 实现静态查询 在 Vue 中实现静态查询通常指不依赖后端接口,直接在前端处理数据筛选或搜索功能。以下是几种常见实现方式: 使用计算属性过滤数据 通过计算属性对静态数据进行筛选,适合简单查询场…

vue实现多个tab

vue实现多个tab

Vue 实现多个 Tab 的方法 使用动态组件切换 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现多个…

vue怎么实现页面返回

vue怎么实现页面返回

Vue 实现页面返回的方法 在 Vue 中实现页面返回功能,可以通过以下几种方式完成,具体取决于项目使用的路由模式和技术栈。 使用 Vue Router 的编程式导航 通过 this.$route…

vue查看更多怎么实现

vue查看更多怎么实现

实现 Vue 的“查看更多”功能 数据截取与显示控制 通过 v-if 或 v-show 控制内容的显示与隐藏。初始状态下只显示部分内容,点击“查看更多”后展开完整内容。 <template&g…

vue弹幕实现不重叠

vue弹幕实现不重叠

实现 Vue 弹幕不重叠的方法 CSS 定位与动画控制 通过绝对定位和动态计算弹幕轨道高度,确保弹幕在不同轨道上运行。每条弹幕占据固定高度的轨道,避免重叠。 // 弹幕轨道高度计算 const t…

vue怎么实现数据检测

vue怎么实现数据检测

Vue 数据检测的实现方式 Vue 通过响应式系统实现数据检测,核心机制基于 Object.defineProperty(Vue 2)或 Proxy(Vue 3)。以下是具体实现方法: 基于 Vu…