1107 lines
30 KiB
Markdown
1107 lines
30 KiB
Markdown
|
|
# SSO/SAML集成技术调研报告
|
|||
|
|
|
|||
|
|
> 版本:v1.1
|
|||
|
|
> 日期:2026-04-02
|
|||
|
|
> 目的:为LLM Gateway项目提供SSO/SAML技术选型参考
|
|||
|
|
> 状态:已修复(根据2026-04-02评审意见)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 执行摘要
|
|||
|
|
|
|||
|
|
### 1.1 调研范围
|
|||
|
|
|
|||
|
|
本报告针对以下SSO/SAML方案进行技术调研和对比分析:
|
|||
|
|
- Keycloak(开源)
|
|||
|
|
- Auth0(商业,现属Okta)
|
|||
|
|
- Okta(商业)
|
|||
|
|
- Casdoor(开源,中国团队)
|
|||
|
|
- Ory(开源)
|
|||
|
|
- Azure AD / Microsoft Entra ID(商业,微软)
|
|||
|
|
|
|||
|
|
### 1.2 关键结论
|
|||
|
|
|
|||
|
|
| 优先级 | 场景 | 推荐方案 | 理由 |
|
|||
|
|
|--------|------|----------|------|
|
|||
|
|
| **P0** | 快速上线 + 成本敏感 | **Casdoor** | 轻量级部署、中文文档、中国合规 |
|
|||
|
|
| **P1** | 企业级功能 + 长期演进 | **Keycloak** | 功能最全面、社区活跃、定制能力强 |
|
|||
|
|
| **P2** | 国际化企业客户 | **Okta/Auth0** | 品牌信任、全球化合规 |
|
|||
|
|
| **后续** | Microsoft 365生态客户 | **Azure AD/Entra ID** | 企业市场领导者,世纪互联运营合规版本 |
|
|||
|
|
|
|||
|
|
### 1.3 行动建议
|
|||
|
|
|
|||
|
|
**近期(1-2个月)**:采用 Casdoor 作为MVP方案,满足快速上线需求
|
|||
|
|
**中期(3-6个月)**:评估 Keycloak 迁移路径,支持更复杂的企业需求
|
|||
|
|
**长期(6个月+)**:根据客户群体,决定是否迁移到 Okta/Auth0 或 Azure AD/Entra ID
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 供应商详细对比
|
|||
|
|
|
|||
|
|
### 2.1 Keycloak
|
|||
|
|
|
|||
|
|
#### 2.1.1 基本信息
|
|||
|
|
|
|||
|
|
| 属性 | 值 |
|
|||
|
|
|------|-----|
|
|||
|
|
| 类型 | 开源 (Apache 2.0) |
|
|||
|
|
| 官网 | https://www.keycloak.org |
|
|||
|
|
| 最新版本 | 26.x (2025) |
|
|||
|
|
| GitHub Stars | ~28k |
|
|||
|
|
| 主要语言 | Java |
|
|||
|
|
|
|||
|
|
#### 2.1.2 功能特性
|
|||
|
|
|
|||
|
|
**协议支持**:
|
|||
|
|
- SAML 2.0 (完整实现)
|
|||
|
|
- OpenID Connect / OAuth 2.0
|
|||
|
|
- LDAP / Active Directory
|
|||
|
|
- Social Login (Google, GitHub, etc.)
|
|||
|
|
- 离线令牌
|
|||
|
|
|
|||
|
|
**企业级功能**:
|
|||
|
|
- 多租户支持 (Realm级别隔离)
|
|||
|
|
- 细粒度RBAC + ABAC
|
|||
|
|
- 身份代理 (Identity Brokering)
|
|||
|
|
- 用户联盟
|
|||
|
|
- 审计日志
|
|||
|
|
- 密码策略
|
|||
|
|
- MFA (TOTP, WebAuthn, SMS)
|
|||
|
|
- 客户端_credentials_flow (机器对机器)
|
|||
|
|
|
|||
|
|
#### 2.1.3 Go集成方案
|
|||
|
|
|
|||
|
|
**推荐库**:
|
|||
|
|
- `github.com/keycloak/keycloak-go` (社区维护)
|
|||
|
|
- `github.com/coreos/go-oidc` (通用OIDC库)
|
|||
|
|
|
|||
|
|
**集成复杂度**:中等
|
|||
|
|
- 需要部署Keycloak服务器
|
|||
|
|
- 提供标准OIDC/SAML接口
|
|||
|
|
- 官方提供 Helm Chart / Operator
|
|||
|
|
|
|||
|
|
**优势**:
|
|||
|
|
- 功能最全面的开源方案
|
|||
|
|
- 活跃的社区和丰富的文档
|
|||
|
|
- Red Hat支持 (JBoss/WildFly生态)
|
|||
|
|
- 大量生产环境验证
|
|||
|
|
|
|||
|
|
**劣势**:
|
|||
|
|
- 资源占用较高 (建议4C8G+)
|
|||
|
|
- Java技术栈,学习曲线
|
|||
|
|
- 默认配置安全性需加强
|
|||
|
|
- 中国区无原生CDN加速
|
|||
|
|
|
|||
|
|
#### 2.1.4 成本分析
|
|||
|
|
|
|||
|
|
| 成本项 | 费用 |
|
|||
|
|
|--------|------|
|
|||
|
|
| 软件本身 | 免费 |
|
|||
|
|
| 自托管服务器 | ¥500-2000/月 (4C8G云主机) |
|
|||
|
|
| 运维人力 | 0.5-1 FTE |
|
|||
|
|
| 商业支持 | Red Hat SSO (约 $40k/年) |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2.2 Auth0
|
|||
|
|
|
|||
|
|
#### 2.2.1 基本信息
|
|||
|
|
|
|||
|
|
| 属性 | 值 |
|
|||
|
|
|------|-----|
|
|||
|
|
| 类型 | 商业SaaS |
|
|||
|
|
| 官网 | https://auth0.com |
|
|||
|
|
| 母公司 | Okta (2021年收购) |
|
|||
|
|
| 估值 | $340亿+ (Okta) |
|
|||
|
|
|
|||
|
|
#### 2.2.2 功能特性
|
|||
|
|
|
|||
|
|
**协议支持**:
|
|||
|
|
- SAML 2.0 / SAML Proxy
|
|||
|
|
- OpenID Connect / OAuth 2.0
|
|||
|
|
- WS-Federation
|
|||
|
|
- 所有主流Social Login
|
|||
|
|
|
|||
|
|
**企业级功能**:
|
|||
|
|
- universal login (单页登录)
|
|||
|
|
- 异常检测 (Anomaly Detection)
|
|||
|
|
- 机器对机器认证
|
|||
|
|
- 无密码认证 (Passwordless)
|
|||
|
|
- 实时日志流
|
|||
|
|
- 99.99% SLA
|
|||
|
|
|
|||
|
|
#### 2.2.3 Go集成方案
|
|||
|
|
|
|||
|
|
**推荐库**:
|
|||
|
|
- `github.com/auth0/go-auth0` (官方SDK)
|
|||
|
|
- `goth` (社区Social Login库)
|
|||
|
|
|
|||
|
|
**集成复杂度**:低
|
|||
|
|
- 提供SDK,集成简单
|
|||
|
|
- 丰富的API和Webhook
|
|||
|
|
- 详细的开发者文档
|
|||
|
|
|
|||
|
|
**优势**:
|
|||
|
|
- 零运维负担
|
|||
|
|
- 业界最佳实践
|
|||
|
|
- 快速集成 (通常1-2周)
|
|||
|
|
- 信用卡PCI合规
|
|||
|
|
|
|||
|
|
**劣势**:
|
|||
|
|
- **数据必须传到境外服务器**
|
|||
|
|
- 成本较高 (按MAU计费)
|
|||
|
|
- 中国区访问慢/不稳定
|
|||
|
|
- vendor lock-in风险
|
|||
|
|
|
|||
|
|
#### 2.2.4 成本分析
|
|||
|
|
|
|||
|
|
| 成本项 | 费用 |
|
|||
|
|
|--------|------|
|
|||
|
|
| 免费额度 | 7,000 MAU |
|
|||
|
|
| Growth Plan | $165/月起 或 $0.020/MAU |
|
|||
|
|
| Enterprise | 需询价 ($50k+/年) |
|
|||
|
|
| **实际成本** | **¥5-50万/年** |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2.3 Okta
|
|||
|
|
|
|||
|
|
#### 2.3.1 基本信息
|
|||
|
|
|
|||
|
|
| 属性 | 值 |
|
|||
|
|
|------|-----|
|
|||
|
|
| 类型 | 商业SaaS |
|
|||
|
|
| 官网 | https://www.okta.com |
|
|||
|
|
| 上市 | NASDAQ: OKTA |
|
|||
|
|
| 市值 | ~$340亿 |
|
|||
|
|
|
|||
|
|
#### 2.3.2 功能特性
|
|||
|
|
|
|||
|
|
**协议支持**:
|
|||
|
|
- SAML 2.0 (核心功能)
|
|||
|
|
- OpenID Connect / OAuth 2.0
|
|||
|
|
- SCIM 2.0 (用户配置)
|
|||
|
|
- 所有主流企业应用集成
|
|||
|
|
|
|||
|
|
**企业级功能**:
|
|||
|
|
- Application Network (预集成7k+应用)
|
|||
|
|
- Lifecycle Management
|
|||
|
|
- API Access Management
|
|||
|
|
- Advanced Server Access
|
|||
|
|
- Privileged Access
|
|||
|
|
- 99.99% SLA
|
|||
|
|
|
|||
|
|
#### 2.3.3 Go集成方案
|
|||
|
|
|
|||
|
|
**推荐库**:
|
|||
|
|
- `github.com/okta/okta-sdk-golang` (官方SDK)
|
|||
|
|
- `github.com/okta/okta-jwt-verifier-go`
|
|||
|
|
|
|||
|
|
**集成复杂度**:低
|
|||
|
|
|
|||
|
|
**优势**:
|
|||
|
|
- 企业市场领导者
|
|||
|
|
- 最广泛的集成生态
|
|||
|
|
- 成熟的治理功能
|
|||
|
|
- 强大的合规认证 (SOC2, ISO27001, FedRAMP)
|
|||
|
|
|
|||
|
|
**劣势**:
|
|||
|
|
- **数据必须传到境外服务器**
|
|||
|
|
- 成本最高
|
|||
|
|
- 中国区访问问题严重
|
|||
|
|
- vendor lock-in风险
|
|||
|
|
|
|||
|
|
#### 2.3.4 成本分析
|
|||
|
|
|
|||
|
|
| 成本项 | 费用 |
|
|||
|
|
|--------|------|
|
|||
|
|
| IAM | $3-6/人/月 |
|
|||
|
|
| SSO | $4-8/人/月 |
|
|||
|
|
| Lifecycle | $3/人/月 |
|
|||
|
|
| **Enterprise套餐** | **$100k+/年** |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2.4 Casdoor
|
|||
|
|
|
|||
|
|
#### 2.4.1 基本信息
|
|||
|
|
|
|||
|
|
| 属性 | 值 |
|
|||
|
|
|------|-----|
|
|||
|
|
| 类型 | 开源 (Apache 2.0) |
|
|||
|
|
| 官网 | https://casdoor.org |
|
|||
|
|
| GitHub Stars | ~9k |
|
|||
|
|
| 主要语言 | Go |
|
|||
|
|
| 维护团队 | 中国团队 |
|
|||
|
|
|
|||
|
|
#### 2.4.2 功能特性
|
|||
|
|
|
|||
|
|
**协议支持**:
|
|||
|
|
- SAML 2.0 (完整实现)
|
|||
|
|
- OpenID Connect / OAuth 2.0
|
|||
|
|
- LDAP (部分)
|
|||
|
|
- 社交登录 (微信、钉钉等中国平台)
|
|||
|
|
- CAS 1.0/2.0
|
|||
|
|
|
|||
|
|
**企业级功能**:
|
|||
|
|
- 多租户支持
|
|||
|
|
- 基于组织的访问控制 (Org-based RBAC)
|
|||
|
|
- WebAuthn / FIDO2
|
|||
|
|
- 微信/钉钉/飞书集成 (中国特色)
|
|||
|
|
- 轻量级设计 (~50MB内存)
|
|||
|
|
|
|||
|
|
#### 2.4.3 Go集成方案
|
|||
|
|
|
|||
|
|
**推荐库**:
|
|||
|
|
- `github.com/casdoor/casdoor-go-sdk` (官方SDK)
|
|||
|
|
- 直接调用API
|
|||
|
|
|
|||
|
|
**集成复杂度**:低
|
|||
|
|
- 纯Go实现,与项目技术栈一致
|
|||
|
|
- 提供 Helm Chart / Docker Compose
|
|||
|
|
- 中文文档完善
|
|||
|
|
|
|||
|
|
**优势**:
|
|||
|
|
- **Go语言原生,与Gateway技术栈一致**
|
|||
|
|
- **内置中国社交登录(微信、钉钉)**
|
|||
|
|
- **轻量级,资源占用低**
|
|||
|
|
- **中文社区,文档完善**
|
|||
|
|
- **可以完全自托管,数据不出境**
|
|||
|
|
|
|||
|
|
**劣势**:
|
|||
|
|
- 社区规模较小
|
|||
|
|
- 国际化程度较低
|
|||
|
|
- 生产验证案例少于Keycloak
|
|||
|
|
- 部分功能仍在完善
|
|||
|
|
|
|||
|
|
#### 2.4.4 成本分析
|
|||
|
|
|
|||
|
|
| 成本项 | 费用 |
|
|||
|
|
|--------|------|
|
|||
|
|
| 软件本身 | 免费 |
|
|||
|
|
| 自托管服务器 | ¥100-500/月 (2C4G即可) |
|
|||
|
|
| 运维人力 | 0.25-0.5 FTE |
|
|||
|
|
| 商业支持 | 暂无官方商业支持 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2.5 Ory
|
|||
|
|
|
|||
|
|
#### 2.5.1 基本信息
|
|||
|
|
|
|||
|
|
| 属性 | 值 |
|
|||
|
|
|------|-----|
|
|||
|
|
| 类型 | 开源 (Apache 2.0) |
|
|||
|
|
| 官网 | https://www.ory.sh |
|
|||
|
|
| GitHub Stars | ~15k (Keto) |
|
|||
|
|
| 主要语言 | Go |
|
|||
|
|
|
|||
|
|
#### 2.5.2 功能特性
|
|||
|
|
|
|||
|
|
**组件**:
|
|||
|
|
- **Ory Kratos**: 身份与用户管理
|
|||
|
|
- **Ory OAuth2/OIDC**: OAuth2/OIDC实现
|
|||
|
|
- **Ory Keto**: 权限管理 (Zanzibar)
|
|||
|
|
- **Ory Hydra**: OAuth2授权服务器
|
|||
|
|
- **Ory Oathkeeper**: 零信任代理
|
|||
|
|
|
|||
|
|
**协议支持**:
|
|||
|
|
- OpenID Connect / OAuth 2.0
|
|||
|
|
- OAuth 2.0 (Hydra)
|
|||
|
|
- WebAuthn / FIDO2 (Kratos)
|
|||
|
|
- **不支持SAML** (重要!)
|
|||
|
|
|
|||
|
|
**企业级功能**:
|
|||
|
|
- 微服务友好
|
|||
|
|
- 云原生架构 (Kubernetes Native)
|
|||
|
|
- 可扩展的权限模型
|
|||
|
|
- 低延迟 (Go实现)
|
|||
|
|
|
|||
|
|
#### 2.5.3 Go集成方案
|
|||
|
|
|
|||
|
|
**推荐库**:
|
|||
|
|
- `github.com/ory/kratos-client-go`
|
|||
|
|
- `github.com/ory/hydra-client-go`
|
|||
|
|
|
|||
|
|
**集成复杂度**:中
|
|||
|
|
- 需要组合多个组件
|
|||
|
|
- 无SAML支持
|
|||
|
|
- 文档质量参差不齐
|
|||
|
|
|
|||
|
|
**优势**:
|
|||
|
|
- **Go语言原生,性能优异**
|
|||
|
|
- 云原生友好
|
|||
|
|
- 现代架构设计
|
|||
|
|
- 权限模型强大
|
|||
|
|
|
|||
|
|
**劣势**:
|
|||
|
|
- **不支持SAML** (如有SAML需求则排除)
|
|||
|
|
- 组件较多,集成复杂
|
|||
|
|
- 社区较小
|
|||
|
|
- 文档不够完善
|
|||
|
|
|
|||
|
|
#### 2.5.4 成本分析
|
|||
|
|
|
|||
|
|
| 成本项 | 费用 |
|
|||
|
|
|--------|------|
|
|||
|
|
| 软件本身 | 免费 (开源) |
|
|||
|
|
| Ory Cloud | $25/月起 (托管服务) |
|
|||
|
|
| 自托管服务器 | ¥500-1500/月 |
|
|||
|
|
| 商业支持 | Ory Enterprise (询价) |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2.6 Azure AD / Microsoft Entra ID
|
|||
|
|
|
|||
|
|
#### 2.6.1 基本信息
|
|||
|
|
|
|||
|
|
| 属性 | 值 |
|
|||
|
|
|------|-----|
|
|||
|
|
| 类型 | 商业SaaS |
|
|||
|
|
| 官网 | https://www.microsoft.com/en-us/security/business/microsoft-entra-id |
|
|||
|
|
| 原名 | Azure Active Directory (Azure AD) |
|
|||
|
|
| 最新名称 | Microsoft Entra ID |
|
|||
|
|
| 市值 | 微软市值 ~$2.8万亿 |
|
|||
|
|
|
|||
|
|
#### 2.6.2 中国运营版本
|
|||
|
|
|
|||
|
|
| 版本 | 运营方 | 合规优势 |
|
|||
|
|
|------|--------|----------|
|
|||
|
|
| Global版 | 微软(境外) | 全球覆盖,中国大陆访问受限 |
|
|||
|
|
| 世纪互联版 | 世纪互联(境内) | **数据存储在中国大陆**,满足《网络安全法》要求 |
|
|||
|
|
|
|||
|
|
> **重要**:中国区企业客户可申请**世纪互联运营的Entra ID版本**,数据存储在境内数据中心,合规风险显著低于其他境外SaaS方案。
|
|||
|
|
|
|||
|
|
#### 2.6.3 功能特性
|
|||
|
|
|
|||
|
|
**协议支持**:
|
|||
|
|
- SAML 2.0 (完整实现)
|
|||
|
|
- OpenID Connect / OAuth 2.0
|
|||
|
|
- WS-Federation
|
|||
|
|
- SCIM 2.0 (用户配置)
|
|||
|
|
- 所有主流企业应用集成
|
|||
|
|
|
|||
|
|
**企业级功能**:
|
|||
|
|
- Microsoft 365 / Teams / SharePoint / Dynamics 365 原生集成
|
|||
|
|
- Application Network (预集成900+应用)
|
|||
|
|
- Conditional Access (条件访问)
|
|||
|
|
- Identity Protection (身份保护)
|
|||
|
|
- Privileged Identity Management (特权身份管理)
|
|||
|
|
- API Access Management
|
|||
|
|
- 99.99% SLA
|
|||
|
|
|
|||
|
|
#### 2.6.4 Go集成方案
|
|||
|
|
|
|||
|
|
**推荐库**:
|
|||
|
|
- `github.com/microsoftgraph/msgraph-sdk-go` (官方SDK)
|
|||
|
|
- `github.com/AzureAD/microsoft-authentication-library-for-go` (MSAL Go)
|
|||
|
|
|
|||
|
|
**集成复杂度**:中
|
|||
|
|
- 标准OIDC/SAML接口,集成友好
|
|||
|
|
- Microsoft Graph API功能丰富
|
|||
|
|
- 文档完善,但中国版可能有差异
|
|||
|
|
|
|||
|
|
**优势**:
|
|||
|
|
- **企业市场领导者**,品牌信任度高
|
|||
|
|
- **Microsoft 365生态原生集成**
|
|||
|
|
- **世纪互联版本数据境内存储**,合规风险低
|
|||
|
|
- 企业客户已有订阅的情况多
|
|||
|
|
- 合规认证最全(SOC2, ISO27001, FedRAMP, 中国等保)
|
|||
|
|
|
|||
|
|
**劣势**:
|
|||
|
|
- 境外Global版数据出境风险高
|
|||
|
|
- 成本较高
|
|||
|
|
- 部分功能仅限Global版
|
|||
|
|
- 技术栈绑定微软生态
|
|||
|
|
|
|||
|
|
#### 2.6.5 成本分析
|
|||
|
|
|
|||
|
|
| 成本项 | 费用 |
|
|||
|
|
|--------|------|
|
|||
|
|
| Free Tier | 免费(基础功能) |
|
|||
|
|
| P1 (每用户/月) | $6 |
|
|||
|
|
| P2 (每用户/月) | $9 |
|
|||
|
|
| Enterprise套餐 | $100k+/年 |
|
|||
|
|
| **实际成本** | **¥300-600/人/年(基础版)** |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 综合对比表
|
|||
|
|
|
|||
|
|
### 3.1 功能维度
|
|||
|
|
|
|||
|
|
| 特性 | Keycloak | Auth0 | Okta | Casdoor | Ory | Azure AD |
|
|||
|
|
|------|----------|-------|------|---------|-----|----------|
|
|||
|
|
| SAML 2.0 | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
|
|||
|
|
| OIDC/OAuth2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|||
|
|
| 多租户 | ✅ | ✅ | ✅ | ✅ | ⚠️ | ✅ |
|
|||
|
|
| MFA | ✅ | ✅ | ✅ | ✅ | ⚠️ | ✅ |
|
|||
|
|
| 中国社交登录 | ⚠️ | ❌ | ❌ | ✅ | ❌ | ❌ |
|
|||
|
|
| 用户 federation | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | ✅ |
|
|||
|
|
| 轻量级 | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|||
|
|
| Go SDK | ⚠️ | ✅ | ✅ | ✅ | ✅ | ⚠️ |
|
|||
|
|
| 社区活跃度 | 高 | 高 | 高 | 中 | 中 | 高 |
|
|||
|
|
| Microsoft 365集成 | ⚠️ | ❌ | ❌ | ❌ | ❌ | ✅ |
|
|||
|
|
| 审计报表 | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | ✅ |
|
|||
|
|
|
|||
|
|
### 3.2 成本维度
|
|||
|
|
|
|||
|
|
| 成本项 | Keycloak | Auth0 | Okta | Casdoor | Ory | Azure AD |
|
|||
|
|
|--------|----------|-------|------|---------|-----|----------|
|
|||
|
|
| 软件成本 | $0 | $0-$50k+/年 | $50k+/年 | $0 | $0 | ¥300-600/人/年 |
|
|||
|
|
| 基础设施/月 | ¥500-2000 | $0 | $0 | ¥100-500 | ¥500-1500 | $0 |
|
|||
|
|
| 集成复杂度 | 中 | 低 | 低 | 低 | 中 | 中 |
|
|||
|
|
| 维护成本 | 中 | 低 | 低 | 低 | 中 | 低 |
|
|||
|
|
|
|||
|
|
### 3.3 合规维度
|
|||
|
|
|
|||
|
|
| 合规要求 | Keycloak | Auth0 | Okta | Casdoor | Ory | Azure AD (Global) | Azure AD (世纪互联) |
|
|||
|
|
|----------|----------|-------|------|---------|-----|---------------------|---------------------|
|
|||
|
|
| 中国数据不出境 | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | **✅** |
|
|||
|
|
| GDPR | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|||
|
|
| SOC2 | ⚠️ | ✅ | ✅ | ❌ | ⚠️ | ✅ | ✅ |
|
|||
|
|
| ISO27001 | ⚠️ | ✅ | ✅ | ❌ | ⚠️ | ✅ | ✅ |
|
|||
|
|
| 中国等保 | ⚠️ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | **待定** |
|
|||
|
|
| FedRAMP | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 中国区合规分析
|
|||
|
|
|
|||
|
|
### 4.1 数据本地化要求
|
|||
|
|
|
|||
|
|
根据《网络安全法》《数据安全法》《个人信息保护法》:
|
|||
|
|
- **重要数据必须存储在境内**
|
|||
|
|
- 个人信息出境需安全评估
|
|||
|
|
- 金融、医疗等行业有额外要求
|
|||
|
|
|
|||
|
|
### 4.2 等保合规分析
|
|||
|
|
|
|||
|
|
#### 4.2.1 等保认证状态对比
|
|||
|
|
|
|||
|
|
| 方案 | 等保认证状态 | 认证级别 | 说明 |
|
|||
|
|
|------|-------------|---------|------|
|
|||
|
|
| Keycloak (自托管) | **可满足等保** | 需自行认证 | 本身不具备认证,需通过部署配置满足要求 |
|
|||
|
|
| Casdoor (自托管) | **待验证** | 无官方认证 | 需通过部署配置和额外安全加固满足要求 |
|
|||
|
|
| Ory (自托管) | **待验证** | 无官方认证 | 需通过部署配置满足要求 |
|
|||
|
|
| Azure AD (世纪互联) | **待定** | 暂无等保认证 | 微软未公开等保认证情况 |
|
|||
|
|
| Auth0 | **不可行** | 无 | 境外服务,数据出境 |
|
|||
|
|
| Okta | **不可行** | 无 | 境外服务,数据出境 |
|
|||
|
|
|
|||
|
|
#### 4.2.2 等保合规验证清单
|
|||
|
|
|
|||
|
|
**自托管方案等保满足路径**:
|
|||
|
|
|
|||
|
|
1. **网络安全等级保护(等保2.0)基本要求**:
|
|||
|
|
- 身份鉴别:实现强密码策略、多因素认证 ✅ (Keycloak/Casdoor均支持)
|
|||
|
|
- 访问控制:细粒度RBAC/ABAC ✅ (Keycloak最强,Casdoor支持Org-based RBAC)
|
|||
|
|
- 安全审计:日志记录、留存、查询 ✅ (均支持,但报表能力有差异)
|
|||
|
|
- 入侵防范:Web应用防火墙、日志监控 ⚠️ 需额外配置
|
|||
|
|
- 数据保密性:传输加密、存储加密 ✅ (TLS+数据库加密)
|
|||
|
|
|
|||
|
|
2. **各方案合规满足度评估**:
|
|||
|
|
|
|||
|
|
| 等保要求项 | Keycloak | Casdoor | Ory |
|
|||
|
|
|-----------|----------|---------|-----|
|
|||
|
|
| 身份鉴别 (8.1.3) | ✅ 完全满足 | ✅ 满足 | ⚠️ 部分满足 |
|
|||
|
|
| 访问控制 (8.1.4) | ✅ 完全满足 | ✅ 满足 | ⚠️ 部分满足 |
|
|||
|
|
| 安全审计 (8.1.5) | ✅ 完整审计日志 | ⚠️ 基础日志 | ⚠️ 基础日志 |
|
|||
|
|
| 审计报表导出 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
|
|||
|
|
| 数据保密性 (8.1.9) | ✅ 满足 | ✅ 满足 | ✅ 满足 |
|
|||
|
|
| **等保合规风险** | **低** | **中** | **中** |
|
|||
|
|
|
|||
|
|
#### 4.2.3 行业特定合规建议
|
|||
|
|
|
|||
|
|
| 行业 | 额外要求 | 合规建议 |
|
|||
|
|
|------|---------|----------|
|
|||
|
|
| 政府/国企 | 等保三级、系统国产化 | **Keycloak**(功能最全面,可定制) |
|
|||
|
|
| 金融 | 等保三级、PCI DSS、数据加密 | **Keycloak** + 额外安全加固 |
|
|||
|
|
| 医疗 | 等保二级、HIPAA合规 | **Keycloak** 或 **Casdoor** |
|
|||
|
|
| 教育 | 等保二级 | **Casdoor**(轻量、微信集成) |
|
|||
|
|
|
|||
|
|
> **重要结论**:Casdoor和Ory均未取得等保认证,在政府/金融/医疗行业作为IdP使用时可能存在准入障碍。建议在高合规要求行业中使用**Keycloak自托管**方案。
|
|||
|
|
|
|||
|
|
### 4.3 合规结论
|
|||
|
|
|
|||
|
|
| 方案 | 数据出境风险 | 等保合规 | 建议 |
|
|||
|
|
|------|-------------|----------|------|
|
|||
|
|
| Keycloak (自托管) | **无风险** | **可满足(需自行认证)** | 推荐 ✅ |
|
|||
|
|
| Auth0 | **高风险** | 不可行 | 不推荐 ❌ |
|
|||
|
|
| Okta | **高风险** | 不可行 | 不推荐 ❌ |
|
|||
|
|
| Casdoor (自托管) | **无风险** | **待验证(存在风险)** | 推荐(谨慎)⚠️ |
|
|||
|
|
| Ory (自托管) | **无风险** | **待验证(存在风险)** | 慎选 ⚠️ |
|
|||
|
|
| Azure AD (世纪互联) | **低风险** | **待定** | 可考虑(Microsoft生态) |
|
|||
|
|
|
|||
|
|
**关键结论**:
|
|||
|
|
1. 如需满足中国合规要求,必须选择自托管方案(Keycloak/Casdoor/Ory)或世纪互联版Azure AD
|
|||
|
|
2. 高合规要求行业(政府/金融/医疗)建议使用**Keycloak**,Casdoor/Ory可能存在准入障碍
|
|||
|
|
3. Microsoft 365生态客户可考虑**Azure AD世纪互联版**,但需确认等保认证状态
|
|||
|
|
|
|||
|
|
### 4.4 审计报表能力评估
|
|||
|
|
|
|||
|
|
审计报表是企业版首批必含能力之一,以下是各方案的审计能力对比:
|
|||
|
|
|
|||
|
|
#### 4.4.1 审计能力对比
|
|||
|
|
|
|||
|
|
| 审计能力 | Keycloak | Auth0 | Okta | Casdoor | Ory | Azure AD |
|
|||
|
|
|---------|----------|-------|------|---------|-----|----------|
|
|||
|
|
| 登录日志 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|||
|
|
| 操作审计日志 | ✅ | ✅ | ✅ | ⚠️ 基础 | ⚠️ 基础 | ✅ |
|
|||
|
|
| 自定义报表 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
|
|||
|
|
| 合规报告模板 | ✅ (SOX等) | ✅ | ✅ | ❌ | ❌ | ✅ |
|
|||
|
|
| 日志导出格式 | JSON/SYSLOG | JSON | JSON | JSON | JSON | JSON |
|
|||
|
|
| 日志留存周期 | 可配置 | 可配置 | 可配置 | 依赖DB | 依赖DB | 可配置 |
|
|||
|
|
| 实时日志流 | ⚠️ | ✅ | ✅ | ❌ | ⚠️ | ✅ |
|
|||
|
|
| 用户行为分析 | ⚠️ | ✅ | ✅ | ❌ | ❌ | ✅ |
|
|||
|
|
| 异常检测 | ⚠️ | ✅ | ✅ | ❌ | ❌ | ✅ |
|
|||
|
|
|
|||
|
|
#### 4.4.2 审计报表能力分析
|
|||
|
|
|
|||
|
|
**Keycloak**:
|
|||
|
|
- 完整的审计事件日志(登录、登出、操作)
|
|||
|
|
- 支持导出为JSON格式
|
|||
|
|
- 可对接外部SIEM系统(ELK、Splunk)
|
|||
|
|
- 自定义报表需借助第三方工具
|
|||
|
|
- 提供事件监听器接口,可扩展
|
|||
|
|
|
|||
|
|
**Auth0/Okta**:
|
|||
|
|
- 最完善的审计报表能力
|
|||
|
|
- 内置异常检测和实时告警
|
|||
|
|
- 丰富的合规报告模板(SOX、HIPAA、GDPR)
|
|||
|
|
- 99.99% SLA保障
|
|||
|
|
|
|||
|
|
**Casdoor**:
|
|||
|
|
- 基础审计日志功能
|
|||
|
|
- 支持登录/登出事件记录
|
|||
|
|
- **不支持自定义报表**
|
|||
|
|
- **不支持合规报告模板**
|
|||
|
|
- 日志依赖数据库存储,需自行实现导出
|
|||
|
|
|
|||
|
|
**Ory**:
|
|||
|
|
- 基础审计能力
|
|||
|
|
- 通过Ory Keto可追踪权限变更
|
|||
|
|
- **不支持自定义报表**
|
|||
|
|
- 微服务架构,日志分散
|
|||
|
|
|
|||
|
|
**Azure AD**:
|
|||
|
|
- 完整的审计日志
|
|||
|
|
- Azure Monitor集成
|
|||
|
|
- 合规报告模板丰富
|
|||
|
|
- Microsoft Sentinel可选
|
|||
|
|
|
|||
|
|
#### 4.4.3 审计报表能力结论
|
|||
|
|
|
|||
|
|
| 场景 | 推荐方案 | 说明 |
|
|||
|
|
|------|---------|------|
|
|||
|
|
| 基础审计需求 | Casdoor | MVP阶段可用,需自行扩展报表 |
|
|||
|
|
| 企业级审计 | Keycloak + SIEM | 可对接外部系统实现完整审计 |
|
|||
|
|
| 高合规要求 | Okta/Auth0/Azure AD | 内置完整审计和合规报表 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 技术选型建议
|
|||
|
|
|
|||
|
|
### 5.1 场景分析
|
|||
|
|
|
|||
|
|
#### 场景A:快速上线 + 成本敏感 + 中国市场
|
|||
|
|
|
|||
|
|
**推荐:Casdoor**
|
|||
|
|
|
|||
|
|
理由:
|
|||
|
|
1. Go语言原生,集成成本最低
|
|||
|
|
2. 内置微信/钉钉/飞书登录,中国市场刚需
|
|||
|
|
3. 轻量级,2C4G即可运行
|
|||
|
|
4. 部署简单,有Docker Compose
|
|||
|
|
5. 数据完全自托管,满足合规
|
|||
|
|
|
|||
|
|
风险:
|
|||
|
|
- 社区较小,生产案例有限
|
|||
|
|
- 部分功能(如SAML IdP)稳定性待验证
|
|||
|
|
|
|||
|
|
#### 场景B:企业级需求 + 多客户 + 长期演进
|
|||
|
|
|
|||
|
|
**推荐:Keycloak**
|
|||
|
|
|
|||
|
|
理由:
|
|||
|
|
1. 功能最全面,生产验证最充分
|
|||
|
|
2. 社区活跃,问题解决快
|
|||
|
|
3. 支持SAML和OIDC,兼容性最好
|
|||
|
|
4. 多租户能力强
|
|||
|
|
5. Red Hat商业支持可选
|
|||
|
|
|
|||
|
|
风险:
|
|||
|
|
- 资源消耗较高
|
|||
|
|
- Java技术栈,与Go项目风格差异
|
|||
|
|
|
|||
|
|
#### 场景C:国际化企业客户为主
|
|||
|
|
|
|||
|
|
**推荐:Okta/Auth0**
|
|||
|
|
|
|||
|
|
理由:
|
|||
|
|
1. 品牌认可度高
|
|||
|
|
2. 预集成7k+应用
|
|||
|
|
3. 合规认证最全
|
|||
|
|
4. 零运维
|
|||
|
|
|
|||
|
|
风险:
|
|||
|
|
- 数据出境问题
|
|||
|
|
- 成本高昂
|
|||
|
|
- vendor lock-in
|
|||
|
|
|
|||
|
|
### 5.2 推荐架构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────┐
|
|||
|
|
│ LLM Gateway │
|
|||
|
|
│ ┌─────────────────────────────┐ │
|
|||
|
|
│ │ Token Auth Middleware │ │
|
|||
|
|
│ └──────────────┬──────────────┘ │
|
|||
|
|
│ │ │
|
|||
|
|
│ ▼ │
|
|||
|
|
│ ┌─────────────────────────────┐ │
|
|||
|
|
│ │ SSO/SAML Integration │ │
|
|||
|
|
│ │ (Go OIDC/SAML Client Lib) │ │
|
|||
|
|
│ └──────────────┬──────────────┘ │
|
|||
|
|
└─────────────────┼──────────────────┘
|
|||
|
|
│
|
|||
|
|
▼
|
|||
|
|
┌─────────────────────────────────────┐
|
|||
|
|
│ 身份提供商 (IdP) │
|
|||
|
|
│ │
|
|||
|
|
│ MVP阶段: Casdoor (自托管) │
|
|||
|
|
│ 演进阶段: Keycloak (可选) │
|
|||
|
|
│ 企业客户: Okta/Auth0 (可选) │
|
|||
|
|
│ Microsoft生态: Azure AD/Entra ID │
|
|||
|
|
└─────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. 集成方案设计
|
|||
|
|
|
|||
|
|
### 6.1 Casdoor集成方案
|
|||
|
|
|
|||
|
|
#### 6.1.1 部署架构
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# docker-compose.yml (Casdoor)
|
|||
|
|
version: '3.8'
|
|||
|
|
services:
|
|||
|
|
casdoor:
|
|||
|
|
image: casbin/casdoor:latest
|
|||
|
|
ports:
|
|||
|
|
- "8000:8000"
|
|||
|
|
environment:
|
|||
|
|
RUNNING_IN_DOCKER: "true"
|
|||
|
|
volumes:
|
|||
|
|
- ./conf:/conf
|
|||
|
|
- ./data:/data
|
|||
|
|
networks:
|
|||
|
|
- casdoor-network
|
|||
|
|
|
|||
|
|
# 可选:MySQL/PostgreSQL 存储
|
|||
|
|
db:
|
|||
|
|
image: postgres:15
|
|||
|
|
environment:
|
|||
|
|
POSTGRES_DB: casdoor
|
|||
|
|
POSTGRES_USER: casdoor
|
|||
|
|
POSTGRES_PASSWORD: secret
|
|||
|
|
volumes:
|
|||
|
|
- db-data:/var/lib/postgresql/data
|
|||
|
|
networks:
|
|||
|
|
- casdoor-network
|
|||
|
|
|
|||
|
|
networks:
|
|||
|
|
casdoor-network:
|
|||
|
|
driver: bridge
|
|||
|
|
|
|||
|
|
volumes:
|
|||
|
|
db-data:
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 6.1.2 Go集成代码
|
|||
|
|
|
|||
|
|
```go
|
|||
|
|
// internal/middleware/sso.go
|
|||
|
|
package middleware
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"context"
|
|||
|
|
"encoding/json"
|
|||
|
|
"net/http"
|
|||
|
|
"net/url"
|
|||
|
|
|
|||
|
|
"github.com/casdoor/casdoor-go-sdk/casdoorsdk"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
type SSOConfig struct {
|
|||
|
|
Endpoint string // e.g., "http://localhost:8000"
|
|||
|
|
ClientID string
|
|||
|
|
ClientSecret string
|
|||
|
|
Certificate string
|
|||
|
|
OrganizationName string
|
|||
|
|
ApplicationName string
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
type SSOHandler struct {
|
|||
|
|
config *SSOConfig
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func NewSSOHandler(cfg *SSOConfig) *SSOHandler {
|
|||
|
|
casdoorsdk.InitConfig(
|
|||
|
|
cfg.ClientID,
|
|||
|
|
cfg.ClientSecret,
|
|||
|
|
cfg.Certificate,
|
|||
|
|
cfg.Endpoint,
|
|||
|
|
cfg.OrganizationName,
|
|||
|
|
cfg.ApplicationName,
|
|||
|
|
)
|
|||
|
|
return &SSOHandler{config: cfg}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// HandleCallback 处理SSO回调
|
|||
|
|
func (h *SSOHandler) HandleCallback(w http.ResponseWriter, r *http.Request) {
|
|||
|
|
code := r.URL.Query().Get("code")
|
|||
|
|
if code == "" {
|
|||
|
|
http.Error(w, "missing code", http.StatusBadRequest)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取token
|
|||
|
|
token, err := casdoorsdk.GetOAuthToken(code)
|
|||
|
|
if err != nil {
|
|||
|
|
http.Error(w, "failed to get token", http.StatusInternalServerError)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取用户信息
|
|||
|
|
claims, err := casdoorsdk.ParseJwtToken(token.AccessToken)
|
|||
|
|
if err != nil {
|
|||
|
|
http.Error(w, "failed to parse token", http.StatusInternalServerError)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 生成内部token或session
|
|||
|
|
internalToken := generateInternalToken(claims)
|
|||
|
|
|
|||
|
|
w.Header().Set("Content-Type", "application/json")
|
|||
|
|
json.NewEncoder(w).Encode(map[string]interface{}{
|
|||
|
|
"token": internalToken,
|
|||
|
|
"user": claims,
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// RedirectToSSO 重定向到SSO登录
|
|||
|
|
func (h *SSOHandler) RedirectToSSO(w http.ResponseWriter, r *http.Request, state string) {
|
|||
|
|
authURL := casdoorsdk.GetOAuthLoginURL(state)
|
|||
|
|
http.Redirect(w, r, authURL, http.StatusFound)
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 6.1.3 SAML集成配置
|
|||
|
|
|
|||
|
|
Casdoor支持标准SAML 2.0,可作为SP或IdP:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
// Casdoor SAML配置示例
|
|||
|
|
{
|
|||
|
|
"saml": {
|
|||
|
|
"enable": true,
|
|||
|
|
"certificate": "-----BEGIN CERTIFICATE-----...",
|
|||
|
|
"privateKey": "-----BEGIN PRIVATE KEY-----...",
|
|||
|
|
"signMetadata": true,
|
|||
|
|
"wantAssertionSigned": true,
|
|||
|
|
"assertionConsumerServiceURL": "http://your-app/saml/callback",
|
|||
|
|
"entityID": "urn:casdoor:your-app"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6.2 Keycloak集成方案
|
|||
|
|
|
|||
|
|
#### 6.2.1 部署架构
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# keycloak-clustered.yaml
|
|||
|
|
apiVersion: v1
|
|||
|
|
kind: StatefulSet
|
|||
|
|
metadata:
|
|||
|
|
name: keycloak
|
|||
|
|
spec:
|
|||
|
|
serviceName: keycloak
|
|||
|
|
replicas: 2
|
|||
|
|
selector:
|
|||
|
|
matchLabels:
|
|||
|
|
app: keycloak
|
|||
|
|
template:
|
|||
|
|
spec:
|
|||
|
|
containers:
|
|||
|
|
- name: keycloak
|
|||
|
|
image: quay.io/keycloak/keycloak:26.0
|
|||
|
|
args: ["start-clustered", "--db=postgres", "--db-url=jdbc:postgresql://postgres:5432/keycloak"]
|
|||
|
|
env:
|
|||
|
|
- name: KEYCLOAK_ADMIN
|
|||
|
|
value: "admin"
|
|||
|
|
- name: KEYCLOAK_ADMIN_PASSWORD
|
|||
|
|
valueFrom:
|
|||
|
|
secretKeyRef:
|
|||
|
|
name: keycloak-admin
|
|||
|
|
key: password
|
|||
|
|
resources:
|
|||
|
|
requests:
|
|||
|
|
cpu: "1"
|
|||
|
|
memory: "2Gi"
|
|||
|
|
limits:
|
|||
|
|
cpu: "2"
|
|||
|
|
memory: "4Gi"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 6.2.2 Go OIDC集成
|
|||
|
|
|
|||
|
|
```go
|
|||
|
|
// internal/middleware/keycloak_oidc.go
|
|||
|
|
package middleware
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"context"
|
|||
|
|
"crypto/rsa"
|
|||
|
|
"encoding/base64"
|
|||
|
|
"encoding/json"
|
|||
|
|
"fmt"
|
|||
|
|
"math/big"
|
|||
|
|
"net/http"
|
|||
|
|
"sync"
|
|||
|
|
"time"
|
|||
|
|
|
|||
|
|
"github.com/coreos/go-oidc/v3/oidc"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
type KeycloakConfig struct {
|
|||
|
|
IssuerURL string
|
|||
|
|
ClientID string
|
|||
|
|
ClientSecret string
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
type KeycloakVerifier struct {
|
|||
|
|
provider *oidc.Provider
|
|||
|
|
verifier *oidc.IDTokenVerifier
|
|||
|
|
config *KeycloakConfig
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func NewKeycloakVerifier(ctx context.Context, cfg *KeycloakConfig) (*KeycloakVerifier, error) {
|
|||
|
|
provider, err := oidc.NewProvider(ctx, cfg.IssuerURL)
|
|||
|
|
if err != nil {
|
|||
|
|
return nil, fmt.Errorf("failed to create provider: %w", err)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
verifier := provider.Verifier(&oidc.Config{
|
|||
|
|
ClientID: cfg.ClientID,
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
return &KeycloakVerifier{
|
|||
|
|
provider: provider,
|
|||
|
|
verifier: verifier,
|
|||
|
|
config: cfg,
|
|||
|
|
}, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (v *KeycloakVerifier) VerifyToken(ctx context.Context, rawToken string) (*Claims, error) {
|
|||
|
|
idToken, err := v.verifier.Verify(ctx, rawToken)
|
|||
|
|
if err != nil {
|
|||
|
|
return nil, err
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var claims Claims
|
|||
|
|
if err := idToken.Claims(&claims); err != nil {
|
|||
|
|
return nil, err
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return &claims, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
type Claims struct {
|
|||
|
|
Subject string `json:"sub"`
|
|||
|
|
Email string `json:"email"`
|
|||
|
|
EmailVerified bool `json:"email_verified"`
|
|||
|
|
Name string `json:"name"`
|
|||
|
|
PreferredUsername string `json:"preferred_username"`
|
|||
|
|
Groups []string `json:"groups"`
|
|||
|
|
Roles []string `json:"realm_access"`
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. 风险评估
|
|||
|
|
|
|||
|
|
### 7.1 各方案风险矩阵
|
|||
|
|
|
|||
|
|
| 风险项 | Keycloak | Casdoor | Okta/Auth0 |
|
|||
|
|
|--------|----------|---------|------------|
|
|||
|
|
| 数据泄露风险 | 低 (自托管) | 低 (自托管) | **高 (境外存储)** |
|
|||
|
|
| 服务中断风险 | 中 (自运维) | 中 (自运维) | 低 (商业SLA) |
|
|||
|
|
| 供应商锁定 | 低 | 低 | **高** |
|
|||
|
|
| 技术支持 | 中 (社区) | 低 (小社区) | 高 (商业支持) |
|
|||
|
|
| 合规风险 | 低 | 低 | **高** |
|
|||
|
|
| 性能问题 | 中 | 低 | 低 |
|
|||
|
|
|
|||
|
|
### 7.2 风险缓解措施
|
|||
|
|
|
|||
|
|
#### 风险1:Casdoor社区较小
|
|||
|
|
**缓解措施**:
|
|||
|
|
- 保持对Keycloak的兼容性预留
|
|||
|
|
- 监控社区发展,适时评估迁移
|
|||
|
|
- 考虑雇佣/咨询Casbin团队
|
|||
|
|
|
|||
|
|
#### 风险2:Keycloak资源消耗高
|
|||
|
|
**缓解措施**:
|
|||
|
|
- 使用Keycloak Operator管理集群
|
|||
|
|
- 配置适当的缓存策略
|
|||
|
|
- 监控资源使用,及时扩容
|
|||
|
|
|
|||
|
|
#### 风险3:中国区网络访问IdP
|
|||
|
|
**缓解措施**:
|
|||
|
|
- Casdoor部署在境内
|
|||
|
|
- Keycloak可选择境内云托管
|
|||
|
|
- 使用CDN加速静态资源
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. 实施计划
|
|||
|
|
|
|||
|
|
### 8.1 阶段一:MVP快速上线 (1-2个月)
|
|||
|
|
|
|||
|
|
> **注意**:微信/钉钉OAuth对接需考虑企业资质审批时间,建议MVP周期预留1-2个月
|
|||
|
|
|
|||
|
|
**目标**:满足基本SSO需求,快速验证
|
|||
|
|
|
|||
|
|
**任务**:
|
|||
|
|
1. 部署Casdoor实例 (1-2天)
|
|||
|
|
2. 配置OIDC集成 (3-5天)
|
|||
|
|
3. 实现Token中间件 (3-5天)
|
|||
|
|
4. 对接微信/钉钉登录 (1-2周,含企业资质审批)
|
|||
|
|
5. SAML 2.0支持 (1周,如客户需要)
|
|||
|
|
6. 测试和文档 (1周)
|
|||
|
|
7. 缓冲时间 (1周,应对集成问题)
|
|||
|
|
|
|||
|
|
**交付物**:
|
|||
|
|
- Casdoor部署配置
|
|||
|
|
- SSO集成代码
|
|||
|
|
- 测试用例
|
|||
|
|
- 运维文档
|
|||
|
|
|
|||
|
|
**成本估算**:
|
|||
|
|
- 人力投入:1-1.5 FTE
|
|||
|
|
- 基础设施:¥100-500/月
|
|||
|
|
|
|||
|
|
### 8.2 阶段二:企业级增强 (1-2个月)
|
|||
|
|
|
|||
|
|
**目标**:支持更复杂的企业需求
|
|||
|
|
|
|||
|
|
**任务**:
|
|||
|
|
1. 多租户隔离强化 (1-2周)
|
|||
|
|
2. MFA集成 (1周)
|
|||
|
|
3. 审计日志完善 (1周)
|
|||
|
|
4. 审计报表功能扩展 (1-2周)
|
|||
|
|
5. Keycloak迁移路径设计 (可选)
|
|||
|
|
|
|||
|
|
**交付物**:
|
|||
|
|
- 多租户设计文档
|
|||
|
|
- MFA集成方案
|
|||
|
|
- 审计报表扩展方案
|
|||
|
|
|
|||
|
|
### 8.3 阶段三:可选迁移评估 (根据需要)
|
|||
|
|
|
|||
|
|
**触发条件**:
|
|||
|
|
- 企业客户明确要求Okta/Auth0/Azure AD
|
|||
|
|
- 运维成本超出承受范围
|
|||
|
|
- 目标行业需要更高级别合规认证
|
|||
|
|
|
|||
|
|
**评估内容**:
|
|||
|
|
- 迁移成本 vs 收益
|
|||
|
|
- 数据出境合规影响
|
|||
|
|
- 供应商锁定风险
|
|||
|
|
- Keycloak vs Azure AD vs Okta 选型
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9. 参考资料
|
|||
|
|
|
|||
|
|
### 9.1 官方文档
|
|||
|
|
|
|||
|
|
- Keycloak: https://www.keycloak.org/documentation
|
|||
|
|
- Casdoor: https://casdoor.org/docs/
|
|||
|
|
- Auth0: https://auth0.com/docs
|
|||
|
|
- Okta: https://developer.okta.com/docs/
|
|||
|
|
- Ory: https://www.ory.sh/docs/
|
|||
|
|
- Azure AD / Microsoft Entra ID: https://www.microsoft.com/en-us/security/business/microsoft-entra-id
|
|||
|
|
|
|||
|
|
### 9.2 Go SDK
|
|||
|
|
|
|||
|
|
- `github.com/casdoor/casdoor-go-sdk`
|
|||
|
|
- `github.com/coreos/go-oidc`
|
|||
|
|
- `github.com/okta/okta-sdk-golang`
|
|||
|
|
- `github.com/keycloak/keycloak-go`
|
|||
|
|
- `github.com/microsoftgraph/msgraph-sdk-go`
|
|||
|
|
- `github.com/AzureAD/microsoft-authentication-library-for-go`
|
|||
|
|
|
|||
|
|
### 9.3 社区资源
|
|||
|
|
|
|||
|
|
- Keycloak GitHub: https://github.com/keycloak/keycloak
|
|||
|
|
- Casdoor GitHub: https://github.com/casdoor/casdoor
|
|||
|
|
- Ory GitHub: https://github.com/ory
|
|||
|
|
- Microsoft Entra ID GitHub: https://github.com/microsoftgraph/msgraph-sdk-go
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 10. 附录
|
|||
|
|
|
|||
|
|
### 附录A:术语表
|
|||
|
|
|
|||
|
|
| 术语 | 说明 |
|
|||
|
|
|------|------|
|
|||
|
|
| SSO | Single Sign-On,单点登录 |
|
|||
|
|
| SAML | Security Assertion Markup Language,安全性断言标记语言 |
|
|||
|
|
| OIDC | OpenID Connect,开放ID连接 |
|
|||
|
|
| IdP | Identity Provider,身份提供商 |
|
|||
|
|
| SP | Service Provider,服务提供商 |
|
|||
|
|
| MFA | Multi-Factor Authentication,多因素认证 |
|
|||
|
|
| RBAC | Role-Based Access Control,基于角色的访问控制 |
|
|||
|
|
| ABAC | Attribute-Based Access Control,基于属性的访问控制 |
|
|||
|
|
| SCIM | System for Cross-domain Identity Management,跨域身份管理系统 |
|
|||
|
|
|
|||
|
|
### 附录B:决策树
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
开始
|
|||
|
|
│
|
|||
|
|
├─ 中国市场优先?
|
|||
|
|
│ │
|
|||
|
|
│ ├─ 是 ──► Casdoor (MVP) 或 Keycloak (企业)
|
|||
|
|
│ │
|
|||
|
|
│ └─ 否 ──► Microsoft 365客户?
|
|||
|
|
│ │
|
|||
|
|
│ ├─ 是 ──► Azure AD/Entra ID (世纪互联版)
|
|||
|
|
│ │
|
|||
|
|
│ └─ 否 ──► 企业客户?
|
|||
|
|
│ │
|
|||
|
|
│ ├─ 是 ──► Okta/Auth0 或 Keycloak
|
|||
|
|
│ │
|
|||
|
|
│ └─ 否 ──► Casdoor 或 Keycloak
|
|||
|
|
│
|
|||
|
|
└─ 预算有限?
|
|||
|
|
│
|
|||
|
|
├─ 是 ──► Casdoor (自托管)
|
|||
|
|
│
|
|||
|
|
└─ 否 ──► Okta/Auth0 (SaaS) 或 Azure AD (世纪互联版)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**文档信息**:
|
|||
|
|
- 作者:Claude AI
|
|||
|
|
- 版本:v1.1
|
|||
|
|
- 日期:2026-04-02
|
|||
|
|
- 状态:已修复(根据评审意见)
|
|||
|
|
- 修复内容:补充Azure AD评估、深化等保合规分析、补充审计报表能力评估、修正实施周期估算
|