当前位置:首页 > 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实现单点

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

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

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

相关文章

vue前端实现搜索

vue前端实现搜索

实现搜索功能的基本方法 在Vue中实现搜索功能通常涉及以下几个关键步骤,结合数据绑定、计算属性和方法调用来动态过滤和显示结果。 数据绑定与输入处理 使用v-model双向绑定搜索输入框的值,监听用户…

vue实现倒计时抢券

vue实现倒计时抢券

Vue 实现倒计时抢券功能 核心逻辑 倒计时抢券功能需要结合时间计算、状态管理和界面交互。通过 Vue 的响应式特性和生命周期钩子,可以高效实现这一需求。 实现步骤 1. 数据准备 在 Vue 组件…

vue实现新闻

vue实现新闻

Vue 实现新闻功能 使用 Vue 实现新闻功能通常涉及新闻列表展示、新闻详情页、分类筛选等模块。以下是实现的基本思路和代码示例。 新闻列表展示 通过 Vue 组件展示新闻列表,通常使用 v-for…

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 在Vue中实现菜单功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-for动态生成菜单 通过数据驱动的方式动态渲染菜单项,适合菜单内容可能变化的场景: <t…

vue实现webshell

vue实现webshell

Vue 实现 WebShell 使用 Vue 实现 WebShell 需要结合前端与后端的交互,通常通过 WebSocket 或 HTTP 协议与服务器通信。以下是一个基于 Vue 和 WebSock…

vue远离实现

vue远离实现

Vue 原理实现 Vue.js 的核心原理包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现原理的详细解析。 响应式系统 Vue 的响应式系统基于 Object.definePro…