当前位置:首页 > VUE

vue实现单点

2026-02-09 22:18:57VUE

Vue 实现单点登录(SSO)方案

单点登录(SSO)允许用户通过一次认证访问多个关联系统。以下是基于 Vue 的实现方案:

基于 OAuth2/OpenID Connect 的实现

  1. 配置认证服务器(如 Keycloak/Auth0) 在认证服务器中注册客户端应用,获取 client_idredirect_uri。OAuth2 授权码模式是推荐的安全流程。

  2. 安装依赖库 使用 vue-oidc-clientoidc-client-js 库处理认证流程:

    npm install oidc-client
  3. 初始化认证服务 创建 auth.js 文件配置 OIDC 客户端:

    import { UserManager } from 'oidc-client';
    
    const config = {
      authority: 'https://sso.example.com',
      client_id: 'vue-app',
      redirect_uri: `${window.location.origin}/callback`,
      response_type: 'code',
      scope: 'openid profile'
    };
    
    export const userManager = new UserManager(config);
  4. 登录跳转与回调处理 在 Vue 组件中触发登录:

    methods: {
      login() {
        userManager.signinRedirect();
      }
    }

    创建 Callback.vue 处理认证响应:

    async mounted() {
      try {
        await userManager.signinRedirectCallback();
        this.$router.push('/');
      } catch (e) {
        console.error(e);
      }
    }
  5. 路由守卫验证 使用 Vue Router 的全局守卫检查认证状态:

    router.beforeEach(async (to, from, next) => {
      const user = await userManager.getUser();
      if (to.meta.requiresAuth && !user) {
        next('/login');
      } else {
        next();
      }
    });

基于 JWT 的跨域方案

  1. 后端签发 JWT 认证成功后,后端返回包含用户信息的 JWT 令牌,设置跨域 Cookie:

    Set-Cookie: token=xxxx; Domain=.example.com; Path=/; Secure; SameSite=None
  2. 前端验证令牌 通过 axios 拦截器自动附加令牌:

    axios.interceptors.request.use(config => {
      const token = Cookies.get('token');
      if (token) config.headers.Authorization = `Bearer ${token}`;
      return config;
    });
  3. 静默刷新令牌 检测令牌过期前自动刷新:

    function scheduleTokenRefresh(expiresIn) {
      setTimeout(async () => {
        await axios.post('/auth/refresh');
      }, (expiresIn - 60) * 1000);
    }

注意事项

  • SameSite Cookie 设置
    现代浏览器要求跨域 Cookie 明确设置 SameSite=None; Secure

  • 本地开发配置
    使用 localhost 需在认证服务器配置允许的回调地址。

  • 权限控制
    结合 Vuex 存储用户角色信息,实现前端路由级权限控制。

  • 安全最佳实践
    始终使用 HTTPS,避免令牌存储在 localStorage 中,推荐使用 HttpOnly Cookie。

以上方案可根据实际需求选择 OAuth2 专业认证服务或自建 JWT 体系,前者更适合企业级复杂场景,后者适合轻量级应用。

vue实现单点

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

相关文章

vue实现轮询

vue实现轮询

实现轮询的基本方法 在Vue中实现轮询可以通过setInterval或setTimeout配合递归调用完成。轮询通常用于定期向服务器请求数据更新。 使用setInterval的简单示例: da…

vue实现旋转

vue实现旋转

Vue 实现旋转效果的方法 在 Vue 中实现旋转效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 动画 通过 Vue 的 :class 或 :style 绑定 CSS 动画实现旋转效…

代码实现vue

代码实现vue

创建Vue项目 使用Vue CLI快速初始化项目,确保已安装Node.js和npm/yarn: npm install -g @vue/cli vue create my-vue-project c…

vue实现图册

vue实现图册

Vue实现图册功能 在Vue中实现图册功能通常涉及图片展示、切换、缩放等交互效果。以下是常见的实现方法和关键代码示例: 基础图册组件结构 使用Vue单文件组件构建基础结构: <templat…

vue翻页实现

vue翻页实现

Vue翻页实现方法 基础分页组件实现 使用v-for和计算属性实现基础分页逻辑: <template> <div> <ul> <li…

vue实现选人

vue实现选人

实现选人功能的基本思路 在Vue中实现选人功能通常涉及以下核心环节:数据绑定、用户交互处理、状态管理以及界面渲染。以下是具体实现方法: 数据准备与组件结构 创建包含人员信息的数组,通常从API获取或…