当前位置:首页 > 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中实现滚动效果可以通过多种方式完成,包括使用原生JavaScript、CSS或第三方库。以下是一些常见的方法: 使用window.scrollTo方法实现页面滚动 可以通…

vue grid实现

vue grid实现

Vue Grid 实现方法 在 Vue 中实现网格布局可以通过多种方式完成,包括使用原生 CSS Grid、第三方组件库或自定义组件。以下是几种常见方法: 使用原生 CSS Grid 通过 Vue…

vue实现selectable

vue实现selectable

Vue 实现可选择的 Select 组件 在 Vue 中实现一个可选择的 Select 组件,可以通过以下几种方式: 使用原生 HTML select 元素 <template> &…

vue实现幻灯

vue实现幻灯

Vue实现幻灯片的基础方法 使用Vue实现幻灯片功能可以通过多种方式完成,以下是几种常见方案: 方案一:基于Vue的过渡动画 通过Vue的<transition>或<transit…

vue 实现templateurl

vue 实现templateurl

在 Vue 中,templateUrl 是 Angular 中的一个概念,用于指定外部 HTML 文件作为模板。Vue 本身不直接支持 templateUrl,但可以通过以下方法实现类似功能: 使用…

vue实现单击

vue实现单击

Vue 实现单击事件的方法 在 Vue 中实现单击事件可以通过 v-on 指令或简写的 @ 符号绑定事件处理器。以下是几种常见的实现方式: 基础用法 通过 v-on:click 或 @click 绑…