首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

SSO 單點登錄解決方案:原理、架構與 Web 實戰完整指南

     編輯:Java 相關知識

什麼是 SSO

Single Sign On:多應用系統中,用戶**一次登錄**,即可訪問所有互信應用。解決:多系統賬號分散、密碼管理混亂、重複登錄體驗差、安全風險高(統計:用戶日均 16 分鐘花在認證、平均 21 個密碼、49% 記紙上、79 秒發生一次身份盜竊)。

核心機制:通票模型

類比頤和園「通票」:大門買票(認證中心登錄)→ 獲取通票 → 各景點驗票放行(應用驗證 Ticket)。流程:

  1. 用戶訪問應用 1 → 未登錄 → 重定向認證中心
  2. 認證中心驗證用戶名/密碼 → 簽發 Ticket(Cookie)
  3. 用戶攜帶 Ticket 訪問應用 2/3 → 應用將 Ticket 送認證中心驗證 → 通過 → 放行

架構關鍵點

  • 統一認證中心:生成/驗證 Ticket,可集群(SAML 協議同步)
  • 用戶庫可分散:認證中心對接多數據源(LDAP/DB),無需物理合併
  • 應用無感知:只需識別並提取 Ticket,委託認證中心驗證

Web-SSO 實現基礎:Cookie + Ticket

  • HTTP 無狀態 → Cookie 維持會話
  • 登錄成功 → 認證中心 Set-Cookie: SSO_ID=xxx; Domain=.example.com; Path=/; MaxAge=60000
  • 瀏覽器自動攜帶 Cookie 訪問同域應用
  • 應用過濾器/攔截器檢查 Cookie → 遠程調用認證中心驗證 → 緩存結果

完整示例部署(三個 WAR)

  1. SSOAuth:認證中心(Servlet + login.jsp + failed.html),web.xml 配置 domainname(如 .sun.com)
  2. SSOWebDemo1/2:受保護應用,web.xml 配置 SSOServiceURL、SSOLoginPage 指向認證中心
  3. 要求:Demo1/2 域名相同(Cookie Domain 生效),Servlet 2.3+ 容器,JDK 1.5(用 ConcurrentMap)

核心代碼邏輯 (SSOAuth Servlet)

  • 兩個 ConcurrentHashMap:accounts(用戶名→密碼)、SSOIDs(Ticket→用戶名)
  • processRequest 分派四種 action:
    • 無 action → handlerFromLogin(登錄驗證、簽發 Cookie、重定向回原 URL)
    • authcookie → authCookie(驗證 Ticket 有效性)
    • authuser → authNameAndPasswd(非 Web 客戶端直驗用戶名密碼)
    • logout → 清理 SSOIDs、清除 Cookie

跨域 SSO 擴展

Cookie Domain 限制同主域,跨域需:
1. 認證中心頁面輸出隱藏 iframe/form 自動提交 Ticket 到目標域
2. 或用 OAuth/CAS 等標準協議

SOA 時代的 SSO 價值

服務間調用頻繁,統一身份認證體系能大幅簡化服務間安全握手,提升協作效率。

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