当前位置:首页 > 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);

vue 实现单点登录


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验证端点

    vue 实现单点登录

    // 后端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 });


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 伪函数实现方法 伪函数(Mock Function)在 Vue 中常用于测试或模拟某些逻辑,以下是几种常见的实现方式: 使用 Jest 的 jest.fn() 在单元测试中,可以通过 Jes…

vue实现好友列表

vue实现好友列表

实现好友列表的Vue组件 数据准备 在Vue组件的data中定义好友列表数据,通常是一个数组对象,每个对象包含好友的基本信息如ID、头像、昵称等。 data() { return {…

vue搜索过后实现分页

vue搜索过后实现分页

Vue 实现搜索后分页功能 数据绑定与搜索逻辑 在 Vue 组件中定义必要的数据属性: data() { return { searchQuery: '', currentPag…

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debou…

vue实现弹窗可切换

vue实现弹窗可切换

实现弹窗可切换的 Vue 方案 动态组件切换 通过 Vue 的 <component :is="currentComponent"> 动态加载不同弹窗组件,结合 v-if 控制显示状态。…

vue使用vr实现标注

vue使用vr实现标注

Vue 中使用 VR 实现标注的方法 在 Vue 项目中结合 VR 技术实现标注功能,可以通过 WebXR 和 Three.js 等库实现。以下为具体实现方法: 安装依赖 确保项目中已安装 Thre…