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

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…

vue实现 toast

vue实现 toast

Vue 实现 Toast 组件 在 Vue 中实现 Toast 组件可以通过多种方式完成,以下是几种常见的方法: 使用全局组件和事件总线 创建一个全局的 Toast 组件,并通过事件总线或 Vue…

vue实现水印

vue实现水印

Vue 实现水印的方法 使用 CSS 背景图 通过 CSS 的 background-image 和 background-repeat 属性实现水印效果。创建一个包含水印文本的 Canvas,将其转…

vue实现ajax

vue实现ajax

Vue 中实现 AJAX 的几种方法 在 Vue 中实现 AJAX 请求可以通过原生 JavaScript 的 XMLHttpRequest、第三方库如 axios 或 fetch API 来完成。以…

vue实现表单

vue实现表单

Vue 表单实现方法 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定。适用于 input、textarea、select 等元素。 <template> <…

vue实现烟花

vue实现烟花

Vue 实现烟花效果 在 Vue 中实现烟花效果可以通过结合 CSS 动画和 JavaScript 动态生成烟花元素。以下是具体实现方法: 动态生成烟花元素 通过 Vue 的 v-for 动…