当前位置:首页 > 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 处理认证响应:

    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. 静默刷新令牌 检测令牌过期前自动刷新:

    vue实现单点

    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 的递归组件特性可以轻松实现无限级嵌套菜单。通过组件调用自身的方式处理嵌套数据。 <template> <ul&…

vue实现portal

vue实现portal

Vue 实现 Portal 功能 Portal 是一种将子节点渲染到父组件 DOM 层级之外的 DOM 节点的技术,常用于实现模态框、弹出层等需要脱离当前组件层级的场景。Vue 可以通过多种方式实现…

vue实现录音

vue实现录音

Vue 实现录音功能 在 Vue 中实现录音功能可以通过浏览器提供的 MediaRecorder API 完成。以下是具体实现方法: 引入依赖 确保项目支持现代浏览器 API,无需额外安装库…

vue实现穿梭框

vue实现穿梭框

Vue 穿梭框实现方法 穿梭框(Transfer)是一种常见的UI组件,用于在两个列表之间移动数据项。以下是基于Vue的实现方法。 基础结构搭建 创建两个列表容器和一个操作按钮区域,使用v-mode…

vue打包实现推送

vue打包实现推送

Vue 项目打包与自动化部署推送 打包 Vue 项目 使用以下命令生成生产环境代码,默认输出到 dist 目录: npm run build 配置自动化推送(以 GitHub Pages 为例)…

vue实现精准查询

vue实现精准查询

实现精准查询的方法 在Vue中实现精准查询通常需要结合输入框、数据处理和筛选逻辑。以下是几种常见的方法: 使用计算属性进行筛选 计算属性适合对数据进行实时筛选,响应输入框的变化: <tem…