当前位置:首页 > VUE

vue 实现单点登录

2026-01-08 04:35:58VUE

单点登录(SSO)实现原理

单点登录允许用户通过一次身份验证访问多个系统。核心原理是用户首次登录后,认证中心颁发令牌(如Token),其他系统通过验证令牌实现免登录。

Vue中实现SSO的方案

基于OAuth2.0/OpenID Connect

使用标准化协议(如OAuth2.0)与认证服务器(如Keycloak、Auth0)交互:

  1. 安装oidc-client

    npm install oidc-client-js
  2. 配置认证信息

    
    // auth.js
    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);


3. 登录跳转
```javascript
// Login.vue
import { userManager } from './auth';

methods: {
  login() {
    userManager.signinRedirect();
  }
}
  1. 回调处理
    // Callback.vue
    async mounted() {
    try {
     const user = await userManager.signinRedirectCallback();
     localStorage.setItem('sso_token', user.access_token);
     this.$router.push('/');
    } catch (error) {
     console.error('SSO回调失败:', error);
    }
    }

基于JWT的跨域方案

适用于自有认证体系的场景:

  1. 主域登录后设置Cookie

    document.cookie = `sso_token=${token}; domain=.example.com; path=/`;
  2. 子应用检查Token

    // main.js
    axios.interceptors.request.use(config => {
    const token = localStorage.getItem('sso_token') 
     || getCookie('sso_token');
    if (token) config.headers.Authorization = `Bearer ${token}`;
    return config;
    });
  3. Token验证端点

    // 后端API需提供验证接口
    /api/verify-token

基于CAS协议

传统企业级方案:

  1. 安装vue-cas插件

    npm install vue-cas
  2. 全局配置

    
    import VueCas from 'vue-cas';

Vue.use(VueCas, { casUrl: 'https://cas.example.com', service: window.location.href });

vue 实现单点登录


3. 路由守卫验证
```javascript
router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !Vue.$cas.isAuthenticated()) {
    Vue.$cas.login();
  } else {
    next();
  }
});

关键注意事项

  • 跨域处理:确保认证服务器配置CORS白名单
  • Token安全:使用HttpOnly、Secure标记的Cookie存储敏感令牌
  • 会话同步:通过postMessage或StorageEvent实现子应用间状态同步
  • 注销处理:需实现全局登出逻辑
    // 注销示例
    userManager.signoutRedirect({ post_logout_redirect_uri: window.location.origin });

调试技巧

  1. 使用浏览器开发者工具检查网络请求和令牌传递
  2. 验证JWT内容可通过jwt.io
  3. 测试不同子域名下的Cookie共享情况

以上方案可根据实际技术栈选择实现,现代SSO推荐优先采用OAuth2.0/OpenID Connect标准协议。

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

相关文章

vue登录逻辑的实现

vue登录逻辑的实现

Vue 登录逻辑实现 前端实现 创建登录组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含表单元素,如用户名和密码输入框,以及提交按钮。 <template&…

vue 实现

vue 实现

Vue 实现的基本步骤 安装 Vue.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue实现效果

vue实现效果

以下是Vue实现常见效果的几种典型方法,分为不同场景说明: 数据绑定与响应式更新 使用v-model实现表单双向绑定: <template> <input v-model="…

vue实现标签

vue实现标签

Vue 实现标签的方法 在 Vue 中实现标签功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 动态组件可以根据不同的条件渲染不同的标签内容。通过 :is 属性动态绑定组件名,实现标签…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…