# Scm.Oidc.Js **Repository Path**: leadiot/scm.oidc.js ## Basic Information - **Project Name**: Scm.Oidc.Js - **Description**: 轻量、易用的多平台联合登录服务(Javascript客户端)。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: http://www.oidc.org.cn - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-02 - **Last Updated**: 2026-06-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: oidc, OAuth, sso, openId, 联合登录 ## README # 🔐 Scm.Oidc - 多平台联合登录 SDK > 基于 OpenID Connect 的轻量、易用的多平台联合登录解决方案 ![登录界面](screenshots/home.png) --- ## ✨ 功能特点 | 特性 | 说明 | |------|------| | **多协议支持** | 同时支持 OAuth1.0、OAuth2.0 协议 | | **轻量无依赖** | 纯 JavaScript 实现,无需第三方依赖 | | **多种 UI 样式** | 支持图标、卡片、列表等多种展示形式 | | **多种登录方式** | 支持微信、手机、邮箱等多种 OAuth 登录 | | **双模式支持** | Web 模式和 SPA(单页应用)模式 | | **多打开方式** | 支持页面跳转、新标签页、弹窗、对话框 | | **框架集成** | 提供 Vue 2/3 完整支持 | | **模块化设计** | AMD、CommonJS、浏览器全局变量多种引入方式 | | **高度可配置** | 丰富的配置选项满足不同场景需求 | --- ## 🌍 支持平台 ### 国内平台 - 支付宝 · 阿里云 · 微信 · QQ · 微博 · 百度 · 抖音 · 钉钉 · 飞书 - 华为 · 小米 · 京东 · 美团 · 快手 · 小红书 · WPS · 印象笔记 · 钉钉 - 360 · 魅族 · OPPO · Vivo · 荣耀 · 开放原子 · DCloud ### 国际平台 - Google · Apple · Microsoft · Facebook · X(Twitter)· LinkedIn · GitHub - GitLab · Gitee · Bitbucket · StackOverflow · Atlassian · Slack - Amazon · Yahoo · Yandex · VK.ru · Ok.ru · Mail.ru · Line - Notion · Figma · Linear · Zoom · Discord · Adobe · Dropbox - Zoho · Box · Todoist · Tower · Evernote · Coding · Teambition > 更多平台支持持续更新中... ## 🖼️ 界面预览 | 验证登录界面 | 授权成功界面 | |-------------|-------------| | ![验证登录](screenshots/login.png) | ![授权成功](screenshots/success.png) | --- ## 📦 安装 ### 直接引入 ```html ``` ### Vue 项目集成 ```html ``` ## 🚀 快速开始 ### 基础用法 ```html
``` ### Vue 3 集成 #### 方式一:使用插件(推荐) ```javascript const { createApp } = Vue; const app = createApp({ template: '', methods: { onSuccess(user) { console.log('登录成功:', user); } } }); // 安装 OIDC Vue 插件 app.use(oidcVue); app.mount('#app'); ``` #### 方式二:使用组合式 API ```javascript const { createApp, ref, onMounted, onUnmounted } = Vue; const app = createApp({ setup() { const { ospList, loading, init, login, dispose } = oidcVue.useVue(); onMounted(() => { init('your-app-key', { mode: 'spa', target: 'dialog', success: (user) => { console.log('登录成功:', user); } }); }); onUnmounted(() => { dispose(); }); return { ospList, loading, login }; }, template: `
加载中...
` }); app.mount('#app'); ``` ### Vue 2 集成 ```javascript Vue.use(oidcVue); new Vue({ el: '#app', template: '', methods: { onSuccess(user) { console.log('登录成功:', user); } } }); ``` ## 📖 API 文档 ### 核心方法 #### `oidc.init(appKey, container, option)` 初始化 OIDC 登录组件。 **参数:** - `appKey` (String, 必填) - 应用密钥 - `container` (String) - 容器元素 ID - `option` (Object) - 配置选项 **配置选项:** | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `mode` | String | `'web'` | 运行模式:`web` \| `spa` | | `target` | String | `'link'` | 打开方式:`link` \| `tab` \| `window` \| `dialog` | | `style` | String | `'item'` | 显示样式:`icon` \| `card` \| `list` | | `view` | String | `'list'` | 视图模式:`list` \| `none` | | `columns` | Number | `5` | 卡片模式列数 | | `align` | String | `'center'` | 图标对齐:`start` \| `center` \| `end` | | `https` | Boolean | `false` | 是否使用 HTTPS | | `log` | Boolean | `false` | 是否开启日志 | | `logLevel` | String | `'info'` | 日志级别:`debug` \| `info` \| `warn` \| `error` | | `response_type` | String | `'code'` | OAuth 响应类型 | | `redirect_uri` | String | - | 回调地址 | | `state` | String | - | 自定义状态参数 | | `scope` | String | - | 授权范围 | | `success` | Function | - | 登录成功回调 | | `error` | Function | - | 登录失败回调 | #### `oidc.load(appKey, callback)` 预加载服务列表数据。 ```javascript oidc.load('your-app-key', function(ospList) { console.log('服务列表:', ospList); }); ``` #### `oidc.loginA(code)` Web 模式登录。 ```javascript oidc.loginA('wechat'); // 微信登录 oidc.loginA('phone'); // 手机登录 oidc.loginA('email'); // 邮箱登录 ``` #### `oidc.loginB(code)` SPA 模式登录。 ```javascript oidc.loginB('wechat'); ``` #### `oidc.authorizeA(code)` Web 模式授权。 ```javascript oidc.authorizeA('wechat'); ``` #### `oidc.authorizeB()` SPA 模式授权。 ```javascript oidc.authorizeB(); ``` #### `oidc.toUri(code)` 根据当前模式自动选择登录方式。 ```javascript oidc.toUri('wechat'); ``` #### `oidc.isRunning()` 检查任务是否运行中。 ```javascript const running = oidc.isRunning(); console.log('运行状态:', running); ``` #### `oidc.endListen()` 停止监听。 ```javascript oidc.endListen(); ``` ### Vue 组件属性 ```html ``` ### Vue 组合式 API ```javascript const { ospList, // Ref - OSP列表 loading, // Ref - 加载状态 error, // Ref - 错误信息 initialized, // Ref - 是否已初始化 init, // Function - 初始化方法 login, // Function - 登录方法 loginA, // Function - Web模式登录 loginB, // Function - SPA模式登录 dispose, // Function - 清理资源 toUri, // Function - 跳转到授权URL version // String - 版本号 } = oidcVue.useVue(); ``` ## 🎨 UI 样式示例 ### 图标模式 ```javascript oidc.init('your-app-key', 'container', { style: 'icon', align: 'center' }); ``` ### 卡片模式 ```javascript oidc.init('your-app-key', 'container', { style: 'card', columns: 3 }); ``` ### 列表模式 ```javascript oidc.init('your-app-key', 'container', { style: 'list' }); ``` ## 🔧 高级用法 ### 动态配置 ```javascript // 根据用户选择动态初始化 function initCustom(config) { oidc.init(config.appKey, 'container', { mode: config.mode, target: config.target, style: config.style, success: function(user) { console.log('登录成功:', user); } }); } ``` ### 预加载数据 ```javascript // 预加载服务列表,提高后续初始化速度 oidc.load('your-app-key', function(ospList) { console.log('预加载完成,服务数量:', ospList.length); // 可以多次调用 init 而无需重复加载 oidc.init('your-app-key', 'container1', { style: 'icon' }); oidc.init('your-app-key', 'container2', { style: 'card' }); }); ``` ### 自定义回调处理 ```javascript oidc.init('your-app-key', 'container', { success: function(user) { // 处理用户信息 console.log('用户ID:', user.id); console.log('用户名:', user.name); // 保存到本地存储 localStorage.setItem('user', JSON.stringify(user)); // 跳转到首页 window.location.href = '/dashboard'; }, error: function(err) { // 错误处理 console.error('登录失败:', err); alert('登录失败,请重试'); } }); ``` ## 📁 项目结构 ``` Scm.Oidc.Js/ ├── oidc/ # 源码目录 │ ├── index.js # 主入口模块 │ ├── core.js # 核心配置模块 │ ├── auth.js # 认证登录模块 │ ├── network.js # 网络请求模块 │ ├── ui.js # UI渲染模块 │ ├── dom.js # DOM操作模块 │ ├── crypto.js # 加密模块 │ └── task.js # 任务管理模块 ├── oidc.js # 未压缩版本 ├── oidc.min.js # 压缩版本 ├── oidc.css # 样式文件 ├── oidc.min.css # 压缩样式 ├── oidc.vue.js # Vue集成模块 ├── index.html # 使用示例 └── vue-example.html # Vue集成示例 ``` ## 🌐 浏览器支持 - Chrome (最新版) - Firefox (最新版) - Safari (最新版) - Edge (最新版) - IE 11+ (需要 polyfill) ## 🔐 安全建议 1. **使用 HTTPS** - 生产环境务必启用 HTTPS 2. **验证 state 参数** - 防止 CSRF 攻击 3. **安全存储 Token** - 避免在 localStorage 存储敏感信息 4. **定期更新密钥** - 定期更换 App Key ## 📝 更新日志 ### v1.3.5 (2026-06-02) - 优化日志系统,支持多级别日志输出 - 改进配置验证和错误提示 - 增强 SPA 模式的稳定性 ### v1.3.4 (2025-11-22) - 新增 Vue 2/3 完整支持 - 添加组合式 API - 优化模块加载机制 ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request! 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 创建 Pull Request ## 📄 许可证 本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件 ## 📮 联系方式 - 官网:https://www.oidc.org.cn - QQ群:121750370 - 问题反馈:提交 Issue ## 🙏 致谢 感谢所有贡献者的支持!