# Scm.Oidc.Java **Repository Path**: leadiot/scm.oidc.java ## Basic Information - **Project Name**: Scm.Oidc.Java - **Description**: 轻量、易用的多平台联合登录服务(Java客户端)。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: http://www.oidc.org.cn - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-16 - **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 协议 | | **多平台覆盖** | 支持国内外近百家主流平台登录授权 | | **隐私安全** | 不存储用户隐私数据,保护用户信息安全 | | **多模式支持** | 支持服务端模式(Authorization Code)和客户端模式 | | **验证码登录** | 支持手机、邮箱验证码登录 | | **PKCE 安全** | 内置 PKCE 协议支持,提升授权安全性 | --- ## 🌍 支持平台 ### 国内平台 - 支付宝 · 阿里云 · 微信 · 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/vcode.png) | ![授权成功](screenshots/success.png) | --- ## 项目结构 ``` Scm.Oidc.Java/ ├── app/ # 示例应用 │ ├── src/main/ │ │ ├── java/com/scm/oidc/ │ │ │ ├── ui/login/ # 登录界面 │ │ │ ├── ui/home/ # 首页 │ │ │ ├── ui/dashboard/ │ │ │ └── ui/notifications/ │ │ └── res/ # 资源文件 │ └── build.gradle.kts # 应用构建配置 ├── oidc/lib/ # OIDC SDK核心库 │ ├── src/main/java/com/scm/oidc/ │ │ ├── dto/ # 数据传输对象 │ │ ├── enums/ # 枚举定义 │ │ ├── exceptions/ # 异常处理 │ │ ├── response/ # 响应模型 │ │ ├── utils/ # 工具类 │ │ ├── OidcClient.java # 核心客户端 │ │ └── OidcConfig.java # 配置类 │ └── build.gradle.kts # 库构建配置 ├── screenshots/ # 截图资源 ├── build.gradle.kts # 项目根构建配置 └── settings.gradle.kts # 模块配置 ``` ## 快速开始 ### 环境要求 - Android Studio 4.0+ - Gradle 8.0+ - 支持Android API 24+ ### 集成SDK #### 方式一:模块依赖 在 `settings.gradle.kts` 中添加模块: ```kotlin include(":oidc:lib") ``` 在应用的 `build.gradle.kts` 中添加依赖: ```kotlin dependencies { implementation(project(":oidc:lib")) } ``` #### 方式二:本地依赖 ```kotlin dependencies { implementation(files("libs/oidc-lib.aar")) } ``` ### 基本使用 #### 1. 初始化客户端 ```java // 使用演示配置 OidcConfig config = new OidcConfig(); config.useDemo(); OidcClient client = new OidcClient(config); // 或使用自定义配置 OidcConfig config = new OidcConfig(); config.appKey = "your_app_key"; config.appSecret = "your_app_secret"; config.redirectUri = "your_redirect_uri"; OidcClient client = new OidcClient(config); ``` #### 2. 获取服务商列表 ```java List ospList = client.listAppOsp(); for (OidcOspInfo osp : ospList) { Log.d("OIDC", "服务商: " + osp.name + ", 代码: " + osp.code); } ``` #### 3. 发送验证码 ```java SendSmsResponse response = client.sendSms(OidcSmsEnums.Email, "user@example.com", ""); if (response.isSuccess()) { String key = response.key; // 保存用于验证 } ``` #### 4. 验证验证码 ```java VerifySmsResponse response = client.verifySmsA(key, "123456"); if (response.isSuccess()) { // 验证成功 } ``` #### 5. 获取网页登录地址 ```java String url = client.getWebUrl("code", "state_value"); // 使用浏览器打开该URL ``` ## SDK API 文档 ### OidcClient 核心方法 | 方法 | 描述 | 参数 | 返回值 | |------|------|------|--------| | `listAllOsp()` | 获取所有服务商 | 无 | `List` | | `listAppOsp()` | 获取应用服务商 | 无 | `List` | | `getWebUrl(responseType, state)` | 获取网页登录地址 | `responseType`: 响应类型, `state`: 状态参数 | `String` | | `getAuthorizeAUrl(state, scope)` | 获取服务端授权地址 | `state`: 状态参数, `scope`: 授权范围 | `String` | | `accessToken(code)` | 换取访问令牌 | `code`: 授权码 | `AccessTokenResponse` | | `refreshToken(accessToken, refreshToken)` | 刷新令牌 | `accessToken`: 访问令牌, `refreshToken`: 刷新令牌 | `RefreshTokenResponse` | | `handshake(state)` | 握手请求(客户端) | `state`: 状态参数 | `HandshakeResponse` | | `listen(ticket)` | 监听授权状态 | `ticket`: 访问凭据 | `ListenResponse` | | `sendSms(type, code, requestId)` | 发送验证码 | `type`: 类型, `code`: 邮箱/手机号, `requestId`: 请求ID | `SendSmsResponse` | | `verifySmsA(key, sms)` | 服务端验证验证码 | `key`: 消息凭据, `sms`: 验证码 | `VerifySmsResponse` | | `verifySmsB(ticket, key, sms)` | 客户端验证验证码 | `ticket`: 访问凭据, `key`: 消息凭据, `sms`: 验证码 | `VerifySmsResponse` | | `getUserInfo(accessToken)` | 获取用户信息 | `accessToken`: 访问令牌 | `UserInfoResponse` | ### 异步方法 SDK同时提供异步版本的方法,以`Async`结尾,支持回调处理: ```java client.listAppOspAsync(new HttpHandler() { @Override public void onFailure(String message) { // 请求失败 } @Override public void onSuccess(String result) { // 请求成功,解析result ListOspResponse response = TextUtils.asObject(result, ListOspResponse.class); } }); ``` ## 完整登录流程(客户端) ``` ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 1.握手请求 │ --> │ 2.获取Ticket │ --> │ 3.打开授权页 │ │ handshake │ │ 返回ticket │ │ OAuth页面 │ └─────────────┘ └─────────────┘ └──────┬──────┘ │ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 6.获取用户 │ <-- │ 5.监听结果 │ <-- │ 4.用户授权 │ │ 信息 │ │ listen循环 │ │ 在浏览器中 │ └─────────────┘ └─────────────┘ └─────────────┘ ``` ## 示例应用 项目包含一个完整的示例应用,展示了以下功能: - 📱 **登录界面** - 支持手机号/邮箱验证码登录 - 🔌 **OAuth授权** - 支持多种第三方平台登录 - 📊 **用户信息展示** - 展示已授权用户信息 - � **通知中心** - 通知消息展示 ### 运行示例 1. 克隆项目到本地 2. 使用Android Studio打开项目 3. 运行 `app` 模块 ## 服务端部署 本SDK需要配合OIDC服务端使用。 **官方网站**: [https://www.oidc.org.cn](https://www.oidc.org.cn) ## 许可证 本项目采用 MIT 许可证 - 详见 LICENSE 文件 ## 联系方式 - 官网:https://www.oidc.org.cn - QQ群:121750370 - 问题反馈:提交 Issue ## 致谢 感谢所有贡献者的支持! --- *Last Updated: 2026*