Files
KeycloakQRLogin/README.MD
huiyiruciduojiao 3a41e0e7f5 docs(readme): 添加二维码登录插件完整文档
- 创建项目概述和主要特性说明
- 添加技术架构和数据流图描述- 提供详细的配置项说明和默认值
- 编写安装部署步骤和环境要求
- 添加API接口说明和主要端点
- 补充开发指南和项目结构说明- 增加安全说明和特殊注意事项
- 添加许可证和联系信息
2025-11-03 00:17:37 +08:00

129 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Keycloak QR Login
易识IT 开发的基于二维码的 Keycloak 登录插件。
## 项目概述
本项目是一个 Keycloak 身份提供商Identity Provider插件实现了基于二维码的登录功能。用户可以通过扫描二维码在移动设备上确认登录实现更便捷、安全的身份验证。
主要特性:
- 支持二维码生成和展示
- 支持扫码状态轮询
- 支持基于JWT Token的身份验证
- 支持内存和Redis两种会话存储方式
- 完整的签名验证机制保证通信安全
- 可配置的各项参数
## 技术架构
### 主要组件
1. **QRLoginIdentityProvider**: 核心身份提供商实现
2. **QRLoginEndpoint**: REST API端点处理扫码、确认等操作
3. **SessionStore**: 会话存储接口及实现(内存/Redis
4. **SignatureUtil**: 签名工具,保障通信安全
5. **前端脚本**: 实现二维码展示和状态轮询
### 数据流
```
1. 用户访问登录页面 -> 2. 点击"二维码登录" -> 3. 生成二维码并展示
4. 用户使用App扫描二维码 <- 5. App调用/qr/scan接口
6. 用户在App确认登录 -> 7. App调用/qr/confirm接口
8. 前端轮询/qr/status获取状态 -> 9. 跳转到确认后的回调URL完成登录
```
## 配置说明
### 插件配置项
| 配置项 | 说明 | 默认值 |
|-------|------|--------|
| Session TTL (s) | 二维码会话有效期(秒) | 120 |
| Poll Interval (ms) | 前端轮询间隔(毫秒) | 1500 |
| Store Type | 存储类型(redis或memory) | memory |
| Redis URI | Redis连接地址 | redis://127.0.0.1:6379 |
| Redis Namespace | Redis键前缀 | qrlogin: |
| HMAC Secret | 签名校验密钥 | change-me |
| Algorithm | 签名算法 | HmacSHA256 |
| Time Window Seconds | 请求有效时间范围(秒) | 5 |
### 环境要求
- Keycloak 20+
- Java 17+
- Redis (可选,用于分布式部署)
## 安装部署
1. 构建项目:
``` bash
mvn clean package
```
2. 将生成的JAR包复制到Keycloak的providers目录:
```bash
cp target/keycloak-qr-login-*.jar $KEYCLOAK_HOME/providers/
```
3. 重启Keycloak服务
4. 在Keycloak管理界面中配置QR Login身份提供商
## API 接口
详细API文档请参考 [OpenAPI 文档](src/main/resources/openapi/qrlogin-openapi.yaml)
主要接口:
- POST `/qr/scan`: 处理二维码扫描
- POST `/qr/confirm`: 处理登录确认
- GET `/qr/status`: 查询二维码状态
## 开发指南
### 项目结构
```
src/main/java/top/ysit/qrlogin
├── config # 配置类
├── core # 核心组件
│ ├── security # 安全相关
│ ├── store # 会话存储
│ └── util # 工具类
├── idp # 身份提供商实现
│ ├── resource # REST资源
│ │ ├── endpoint # 端点实现
│ │ └── factory # 工厂类
│ └── QRLoginIdentityProvider*
└── spi # SPI实现
```
### 扩展功能
1. 添加新的存储实现: `core\SessionStore.java` 接口
2. 自定义签名算法: 扩展 `SignatureConfig.SignatureAlgorithm`
3. 修改前端样式: 编辑主题文件 `theme/qrlogin/login/resources/js/script.js`
## 安全说明
1. 所有API调用均需签名验证
2. 时间戳验证防止重放攻击
3. JWT Token验证确保用户身份合法性
4. 会话具有固定有效期,防止长期有效攻击
## 特殊说明
1. Redis功能暂时没有开发完整待完善。
2. 基于IDP ISP 实现的,所以用户第一次登录时,需要绑定账号
3. 前端登录效果需要依赖`theme/qrlogin/login/resources/js/script.js`文件
## 许可证
Apache License 2.0
## 联系我们
易识IT