業務場景拆解
- **第一階段**:雙門戶互信登錄 (SSO) — 用戶在 A 登錄後訪問 B 無感知
- **第二階段**:會員基礎信息同步 (姓名、手機、等級)
- **第三階段**:行為數據共享 (瀏覽歷史、優惠券、活動記錄) → 跨站推薦/風控
技術方案選型矩陣
| 方案 | 核心協議 | 適用階段 | 複雜度 | 安全性 | 擴展性 |
| CAS (Central Authentication Service) | CAS Protocol / SAML 1.1 | 階段 1 | 中 | 高 | 中 (需維護 CAS Server) |
| OAuth 2.0 + OpenID Connect (OIDC) | OAuth 2.0 (Authorization Code + PKCE) + OIDC | **全階段** | 中高 | **最高 (業界標準)** | **極佳 (支援第三方、移動端、微服務)** |
| 自建 Token + 共享 Redis | JWT / 隨機 Token + Redis Cluster | 階段 1-2 | 低 | 中 (需自行處理撤銷、刷新) | 中 |
| SAML 2.0 | SAML 2.0 | 企業級 SSO | 高 | 高 | 低 (XML 重、難擴展) |
推薦架構:OAuth 2.0 + OIDC (IdentityServer / Keycloak / 自研)
核心組件
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Portal A │ │ Auth Server │ │ Portal B │
│ (Client) │◄───►│ (Identity │◄───►│ (Client) │
│ │ │ Provider) │ │ │
└─────────────┘ └──────────────┘ └─────────────┘
▲ ▲ ▲
│ User Info / │ Access Token │
└───────────────────┴──────────────────────┘
Resource Server (API Gateway)
流程細節
- 統一登錄頁:所有門戶未登錄跳轉至 Auth Server `/login?client_id=portalA&redirect_uri=...`
- 授權碼模式 + PKCE:防授權碼攔截,適用 SPA/原生 App
- ID Token (OIDC):包含 `sub`, `name`, `phone`, `roles` 等聲明,客戶端驗證簽名 (RS256) 即可信任
- Access Token (JWT):短效 (15-30min),攜帶 `scope=profile orders coupons` 訪問資源 API
- Refresh Token:長效 (30天),輪換機制 + 撤銷列表 (Redis Bloom Filter)
- 用戶信息同步:Auth Server 為 **唯一寫入源**;門戶定時/事件驅動同步至本地 `member_profile` 表 (最終一致性)
- 行為數據共享:門戶發送事件至 Kafka/RocketMQ → 統一數據平台清洗 → 畫像標簽 → 反饋各門戶個性化推薦
安全加固清單
- **HTTPS 全站強制** (HSTS, Certificate Transparency)
- **SameSite=Strict/Lax** Cookie 防 CSRF
- **Content Security Policy (CSP)** 防 XSS
- **Token 綁定設備指紋** (可選) 防盜用
- **審計日志** 記錄登錄、授權、敏感操作 (ELK/Splunk)
- **定期滾動簽名金鑰** (JWKS 自動輪換)
快速落地:用 Keycloak (開箱即用)
- Docker 啟動:`docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:24.0 start-dev`
- 建立 Realm → Clients (portalA, portalB) → 設定 Redirect URIs、Web Origins
- 配置 Mappers:將 DB 字段映射為 Token Claims
- 門戒接入:Spring Boot `spring-boot-starter-oauth2-client` / Node `openid-client` / Java `pac4j`
總結
**OAuth 2.0 + OIDC 是多站點會員互通的標準解法**。Auth Server 統一身份認證與授權,門戶輕量化為 Resource Client。以 Keycloak/IdentityServer 為核心,配合事件驅動數據同步,可平滑演進至全域用戶畫像平台。