首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

多網站會員帳號互通與數據共享架構設計:SSO、OAuth2、OpenID Connect 方案選型

     編輯:程式設計綜合問答

業務場景拆解

  • **第一階段**:雙門戶互信登錄 (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 + 共享 RedisJWT / 隨機 Token + Redis Cluster階段 1-2低中 (需自行處理撤銷、刷新)中
SAML 2.0SAML 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)

流程細節

  1. 統一登錄頁:所有門戶未登錄跳轉至 Auth Server `/login?client_id=portalA&redirect_uri=...`
  2. 授權碼模式 + PKCE:防授權碼攔截,適用 SPA/原生 App
  3. ID Token (OIDC):包含 `sub`, `name`, `phone`, `roles` 等聲明,客戶端驗證簽名 (RS256) 即可信任
  4. Access Token (JWT):短效 (15-30min),攜帶 `scope=profile orders coupons` 訪問資源 API
  5. Refresh Token:長效 (30天),輪換機制 + 撤銷列表 (Redis Bloom Filter)
  6. 用戶信息同步:Auth Server 為 **唯一寫入源**;門戶定時/事件驅動同步至本地 `member_profile` 表 (最終一致性)
  7. 行為數據共享:門戶發送事件至 Kafka/RocketMQ → 統一數據平台清洗 → 畫像標簽 → 反饋各門戶個性化推薦

安全加固清單

  • **HTTPS 全站強制** (HSTS, Certificate Transparency)
  • **SameSite=Strict/Lax** Cookie 防 CSRF
  • **Content Security Policy (CSP)** 防 XSS
  • **Token 綁定設備指紋** (可選) 防盜用
  • **審計日志** 記錄登錄、授權、敏感操作 (ELK/Splunk)
  • **定期滾動簽名金鑰** (JWKS 自動輪換)

快速落地:用 Keycloak (開箱即用)

  1. Docker 啟動:`docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:24.0 start-dev`
  2. 建立 Realm → Clients (portalA, portalB) → 設定 Redirect URIs、Web Origins
  3. 配置 Mappers:將 DB 字段映射為 Token Claims
  4. 門戒接入:Spring Boot `spring-boot-starter-oauth2-client` / Node `openid-client` / Java `pac4j`

總結

**OAuth 2.0 + OIDC 是多站點會員互通的標準解法**。Auth Server 統一身份認證與授權,門戶輕量化為 Resource Client。以 Keycloak/IdentityServer 為核心,配合事件驅動數據同步,可平滑演進至全域用戶畫像平台。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved