当前位置:首页 > 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 实现文档的方法 在 Vue 中实现文档功能可以通过多种方式,包括使用富文本编辑器、Markdown 解析或直接渲染 HTML。以下是几种常见的实现方法。 使用富文本编辑器 富文本编辑器如…

vue实现共享屏幕

vue实现共享屏幕

共享屏幕的基本实现 在Vue中实现共享屏幕功能通常需要结合浏览器的getDisplayMedia API。以下是一个基础实现示例: <template> <div>…

vue 实现长列表

vue 实现长列表

Vue 实现长列表的优化方案 虚拟滚动技术 虚拟滚动是处理长列表的高效方式,仅渲染可视区域内的元素。通过计算滚动位置动态加载和卸载DOM节点,大幅减少内存占用和渲染压力。 <template&…

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单的常见方法 基于路由配置生成菜单 Vue Router 的路由配置可以天然转化为菜单结构,适合权限与路由绑定的系统: // router/index.js const rout…

课程表vue实现

课程表vue实现

实现课程表的Vue组件 创建课程表需要设计数据结构、布局和交互逻辑。以下是一个基于Vue 3的实现方案: 数据结构设计 const timetableData = ref([ { ti…

vue实现点击页面切换

vue实现点击页面切换

实现点击页面切换功能 在Vue中实现点击页面切换功能,可以通过路由跳转或组件动态渲染两种方式完成。以下是具体实现方法: 使用Vue Router实现页面跳转 安装Vue Router后,在项目中…