当前位置:首页 > 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 3(Composition API)或 Vue 2(Options API)作为前端框架,搭配 Vue Router 实现路由管理,V…

vue实现购物按钮

vue实现购物按钮

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

vue实现slider

vue实现slider

Vue 实现 Slider 组件 使用 Vue 实现 Slider 组件可以通过原生开发或借助第三方库。以下是两种常见方法: 原生实现 Slider 创建一个基础的 Slider 组件,通过 v-…

vue怎么实现

vue怎么实现

Vue 实现方法 Vue 是一个流行的前端框架,用于构建用户界面。以下是几种常见的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。 <input v…

vue实现计算

vue实现计算

Vue 实现计算的方法 在 Vue 中实现计算功能可以通过多种方式完成,主要包括计算属性(computed)、方法(methods)和侦听器(watch)。以下是具体的实现方法: 计算属性(Comp…

vue代理实现

vue代理实现

Vue 代理实现方法 在 Vue 项目中,配置代理可以解决开发环境下的跨域问题,通常通过修改 vue.config.js 文件实现。以下是几种常见的代理配置方式: 基础代理配置 在 vue.con…