首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 單點登錄 (SSO) 三大經典實現場景全解析

     編輯:ASP.NET 基礎

SSO 核心原理

單點登錄本質是身份憑證共享。Forms 認證基於加密 Cookie(FormsAuthenticationTicket),實現 SSO 的關鍵在於讓多個應用能夠讀取、驗證同一張身份 Cookie。

場景一:同主域不同子域(最常見、最簡單)

例子:app1.domain.com、app2.domain.com 共享 .domain.com 域 Cookie

Web.config 關鍵配置


    

登錄代碼實現

// 1. 序列化用戶數據
string userData = JsonHelper.Serialize(user);

// 2. 創建認證票據
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1,                              // 版本
    user.UserId.ToString(),         // 用戶標識
    DateTime.Now,                   // 發行時間
    DateTime.Now.AddHours(4),       // 過期時間
    false,                          // 持久化
    userData                        // 用戶數據
);

// 3. 加密並寫入 Cookie
HttpCookie cookie = new HttpCookie(
    FormsAuthentication.FormsCookieName, 
    FormsAuthentication.Encrypt(ticket)
);
cookie.Domain = ".domain.com"; // 關鍵:設置共享域
Response.Cookies.Add(cookie);

場景二:同一域名下主應用與虛擬目錄子應用

例子:domain.com(主站)、domain.com/subapp(子應用)

關鍵配置:統一 MachineKey

原理:Forms 認證加密/解密使用 MachineKey。默認 IsolateApps 導致每個應用生成不同 Key,必須手動指定相同 Key 實現跨應用 Cookie 解密。

Web.config 完整配置


  

場景三:完全不同域名(跨域 SSO)

例子:domainA.com、domainB.com、domainC.com

主流實現方案對比

方案原理優點缺點
父域 Cookie設置 Cookie Domain 為公共父域簡單、無需額外系統需同根域、安全風險
集中式 SSO 服務CAS/OAuth/OpenID Connect 協議標準化、安全、支持異構系統架構複雜、引入單點故障
Token 重定向傳遞登錄後攜帶 Token 跳轉至目標系統實現靈活、無需共享域URL 暴露 Token、需防重放
後台直連驗證子系統調用 SSO 服務 API 驗證安全、無瀏覽器跳轉增加網絡調用延遲

簡易 Token 重定向示例

// 登錄系統生成 Token
string token = GenerateSecureToken(userId);
Response.Redirect($"https://appB.com/sso/login?token={token}&returnUrl={targetUrl}");

// 子系統驗證 Token
public ActionResult Login(string token, string returnUrl)
{
    var userId = ValidateToken(token);
    if (userId > 0)
    {
        SetLocalAuthCookie(userId);
        return Redirect(returnUrl);
    }
    return RedirectToAction("Login", "Account");
}

安全加固清單

  1. HTTPS 強制:所有登錄、跳轉、API 均需 HTTPS
  2. Token 簽名驗證:JWT RS256 非對稱簽名,防篡改
  3. 短時效 + 刷新機制:Access Token 15-30分鐘,Refresh Token 長效
  4. SameSite Cookie:設置 SameSite=Lax 或 Strict 防 CSRF
  5. HttpOnly & Secure:Cookie 禁止 JS 讀取、僅 HTTPS 傳輸
  6. 防重放攻擊:Token 單次使用或攜帶 Nonce/時間戳

現代化選型建議

  • 新項目優先採用 OpenID Connect / OAuth 2.0 標準協議
  • 使用成熟框架:IdentityServer4/8、Auth0、Azure AD B2C
  • 避免自行造輪子實現加密協議,安全風險極高

根據業務架構複雜度、安全等級、團隊技術棧選擇最適合的 SSO 方案,漸進式演進而非一步到位。

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