当前位置:首页 > 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 项目实现指南 环境准备 确保已安装 Node.js(建议版本 14+)和 npm/yarn。通过以下命令检查版本: node -v npm -v 安装 Vue CLI(脚手架工具): np…

vue实现购物按钮

vue实现购物按钮

Vue 购物按钮实现方法 基础按钮实现 使用 Vue 的模板语法创建基础按钮组件,绑定点击事件处理购物逻辑: <template> <button @click="addTo…

vue实现文字播放栏

vue实现文字播放栏

Vue 实现文字播放栏(跑马灯效果) 方法一:使用 CSS 动画 + Vue 数据绑定 通过 CSS 的 @keyframes 实现动画效果,结合 Vue 的动态数据绑定控制内容。 <t…

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed: {…

vue前端实现打印功能

vue前端实现打印功能

使用Vue实现前端打印功能 在Vue项目中实现打印功能可以通过多种方式完成,以下是几种常见的方法: 使用window.print()方法 这是最简单的打印方式,直接调用浏览器的打印功能。 me…

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-fo…