当前位置:首页 > VUE

vue实现sso

2026-03-07 00:19:23VUE

Vue 实现 SSO(单点登录)

使用 OAuth2.0/OpenID Connect 协议

在 Vue 项目中集成 SSO,通常采用 OAuth2.0 或 OpenID Connect 协议。以下是实现步骤:

安装依赖库(如 oidc-client-jsvue-oidc-client):

npm install oidc-client

配置认证客户端:

import { UserManager } from 'oidc-client';

const config = {
  authority: 'https://your-sso-provider.com',
  client_id: 'your-client-id',
  redirect_uri: 'http://localhost:8080/callback',
  response_type: 'code',
  scope: 'openid profile email',
};

const userManager = new UserManager(config);

登录跳转:

vue实现sso

userManager.signinRedirect();

处理回调:

userManager.signinRedirectCallback().then(user => {
  console.log('Logged in user:', user);
});

使用 JWT 和 Vuex 管理状态

在 Vuex 中存储用户认证状态:

const store = new Vuex.Store({
  state: {
    user: null,
    token: null,
  },
  mutations: {
    setUser(state, payload) {
      state.user = payload.user;
      state.token = payload.token;
    },
  },
});

路由守卫验证:

vue实现sso

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!store.state.token) {
      next('/login');
    } else {
      next();
    }
  } else {
    next();
  }
});

后端会话验证

前端需要定期验证 token 有效性:

setInterval(() => {
  axios.get('/api/validate-token').catch(() => {
    userManager.signinRedirect();
  });
}, 300000);

跨域处理

配置 axios 全局拦截器携带 token:

axios.interceptors.request.use(config => {
  if (store.state.token) {
    config.headers.Authorization = `Bearer ${store.state.token}`;
  }
  return config;
});

退出登录实现

清除本地状态并调用 SSO 退出端点:

userManager.signoutRedirect();

注意事项

  • 确保所有子应用使用相同的 SSO 配置
  • 生产环境必须使用 HTTPS
  • 敏感操作需要重新验证
  • 考虑实现 silent renew 自动刷新 token

以上方案适用于大多数基于标准的 SSO 服务(如 Keycloak、Auth0、Azure AD 等)。具体实现需根据实际 SSO 提供商文档调整参数和流程。

标签: vuesso
分享给朋友:

相关文章

vue手写签名如何实现

vue手写签名如何实现

实现手写签名的基本思路 在Vue中实现手写签名功能,通常需要借助HTML5的Canvas API来捕获用户的绘制操作。核心流程包括初始化画布、监听触摸/鼠标事件、记录轨迹以及生成签名图片。 安装依赖…

vue实现同步

vue实现同步

Vue 实现同步的方法 在 Vue 中实现同步操作通常涉及数据绑定、状态管理和异步操作的处理。以下是几种常见的方法: 使用计算属性(Computed Properties) 计算属性基于响应式依赖进…

vue 实现列表

vue 实现列表

Vue 实现列表的方法 在 Vue 中实现列表通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 指令遍历数组,渲染列表项。ite…

vue实现换肤

vue实现换肤

使用 CSS 变量实现换肤 在 Vue 项目中,可以通过 CSS 变量(Custom Properties)动态切换主题色。CSS 变量可以在运行时修改,适合实现换肤功能。 定义全局 CSS 变量:…

vue首页实现

vue首页实现

实现Vue首页的基本步骤 创建一个Vue首页通常涉及项目初始化、页面结构设计、路由配置和组件开发。以下是具体实现方法: 初始化Vue项目 使用Vue CLI或Vite快速搭建项目结构: npm i…

vue实现双向

vue实现双向

Vue 实现双向绑定的方法 Vue 的双向绑定主要通过 v-model 指令实现,它结合了数据绑定和事件监听,适用于表单元素(如 input、select、textarea 等)。以下是几种常见的实现…