当前位置:首页 > VUE

vue怎么实现单点登录

2026-02-24 13:24:44VUE

单点登录(SSO)的基本原理

单点登录允许用户通过一次身份验证访问多个相互信任的应用系统。在Vue中实现SSO通常需要结合后端认证服务(如OAuth2.0、JWT或CAS协议)。

基于JWT的实现方案

  1. 认证中心配置
    部署独立的认证服务器,用于签发JWT令牌。用户首次登录时,认证中心验证身份并生成Token。

    // 示例:生成JWT(需后端实现)
    const token = jwt.sign({ userId: '123' }, 'secretKey', { expiresIn: '1h' });
  2. 前端Token处理
    Vue应用登录成功后接收Token并存储(如localStorage或Vuex):

    vue怎么实现单点登录

    localStorage.setItem('sso_token', token);
    axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
  3. 跨域共享Token
    通过子域名或URL参数传递Token。例如,主域设为.example.com,子应用可通过document.cookie共享Token:

    document.cookie = `sso_token=${token}; domain=.example.com; path=/`;

基于OAuth2.0的实现方案

  1. 授权码模式流程

    vue怎么实现单点登录

    • 用户访问Vue应用时,重定向到OAuth服务商(如Google、自建服务)。
    • 授权成功后,回调Vue应用并携带授权码,前端通过授权码获取Access Token。
  2. Vue中集成OAuth
    使用vue-oidc-client等库简化流程:

    import { VueOidc } from 'vue-oidc-client';
    Vue.use(VueOidc, {
      authority: 'https://auth.example.com',
      client_id: 'vue-app',
      redirect_uri: window.location.origin + '/callback'
    });

跨应用通信方案

  1. PostMessage API
    主应用与子应用通过window.postMessage传递认证状态:

    // 主应用发送Token
    window.parent.postMessage({ type: 'SSO_TOKEN', token }, '*');
    
    // 子应用监听
    window.addEventListener('message', (event) => {
      if (event.data.type === 'SSO_TOKEN') {
        localStorage.setItem('token', event.data.token);
      }
    });
  2. iframe共享存储
    通过隐藏的iframe统一管理登录状态,子应用通过iframe获取最新Token。

安全注意事项

  • 使用HTTPS防止Token劫持。
  • 设置Token短有效期并启用Refresh Token机制。
  • 敏感操作需二次验证。
  • 避免将Token直接暴露在URL中。

示例:Vue拦截器验证Token

axios.interceptors.request.use(config => {
  const token = localStorage.getItem('sso_token');
  if (token) config.headers.Authorization = `Bearer ${token}`;
  return config;
});

axios.interceptors.response.use(response => {
  return response;
}, error => {
  if (error.response.status === 401) {
    window.location.href = 'https://sso.example.com/login?redirect=' + encodeURIComponent(window.location.href);
  }
  return Promise.reject(error);
});

以上方案可根据实际需求组合使用,需确保后端认证服务支持相应的协议(如OAuth2.0或JWT验证)。

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

相关文章

vue 实现toast

vue 实现toast

vue 实现 toast 的方法 在 Vue 中实现 Toast 提示功能可以通过多种方式,以下是几种常见的实现方法: 使用第三方库 Vue 生态中有许多成熟的 Toast 库,例如 vue-toa…

vue菜单实现

vue菜单实现

Vue 菜单实现方法 使用 Element UI 的菜单组件 Element UI 提供了现成的菜单组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用 el-menu 相关组件。…

vue jwt实现

vue jwt实现

Vue JWT 实现方法 安装依赖 确保项目中安装了 jsonwebtoken(后端)和 axios(前端)。若使用 Vue 3,可搭配 vue-router 和 pinia(或 vuex)管理状态。…

vue实现按钮

vue实现按钮

Vue 实现按钮的方法 使用原生 HTML 按钮 在 Vue 模板中可以直接使用 HTML 的 <button> 元素,通过 v-on 或 @ 绑定点击事件。 <template&…

vue实现折叠

vue实现折叠

Vue 实现折叠功能 在 Vue 中实现折叠功能可以通过多种方式完成,以下介绍几种常见的方法。 使用 v-show 或 v-if 控制显示隐藏 通过 Vue 的指令 v-show 或 v-if 可以…

mui实现vue

mui实现vue

mui 实现 Vue 的步骤 mui 是一个轻量级的前端框架,常用于移动端开发。结合 Vue 可以实现高效的开发体验。以下是具体实现方法。 安装 mui 和 Vue 通过 npm 或 yarn 安装…