聯合安全的目標是提供在域間建立信任關系的機制,這樣,用戶通過自己所屬域的身份驗證後,就獲得了授權可以訪問其他域的應用程序和服務。這使單一登錄這樣的身份驗證方法成為可能,采用這種方法,無需針對多個應用程序和域為用戶配置和管理重復帳戶,從而顯著降低將應用程序擴展到受信任方的成本。
在聯合安全模型中,身份標識提供程序 (IdP) 執行身份驗證,並通過安全令牌服務 (STS) 頒發安全令牌。這些令牌斷言有關經過身份驗證的用戶的信息:用戶身份標識和其他可能的信息(包括角色和更細粒度的訪問權限)。在聯合技術領域,這些信息稱為聲明,基於聲明的訪問控制是聯合安全模型的核心。在這一模型中,應用程序和服務根據來自受信任頒發機構 (STS) 的聲明,對特性和功能的訪問進行授權。
Windows Identity Foundation (WIF) 等平台工具大大降低了支持這種聯合身份驗證的難度。WIF 是一個身份標識模型框架,用於構建基於聲明的應用程序和服務,支持基於 SOAP(主動)和基於浏覽器(被動)的聯合方案。在 MSDN 雜志 2009 年 11 月刊中的文章“通過 WIF 實現基於聲明的授權”中,我重點介紹了如何在 Windows Communication Foundation (WCF) 中使用 WIF。在這篇文章中,我介紹了如何為 WCF 服務實現基於聲明的安全模型,以及如何遷移到聯合身份驗證。
在本後續文章中,我將重點介紹被動聯合。我將說明被動聯合的通信流程,介紹幾種在 ASP.NET 應用程序中支持聯合的方法,討論基於聲明的 ASP.NET 授權方法,然後介紹單一登錄和單一注銷方案。同時,我將介紹支持被動聯合方案的基礎 WIF 功能和組件。
被動聯合基礎
被動聯合方案基於 WS-Federation 規范。該規范規定了如何請求安全令牌,如何發布和獲取聯合元數據文檔,從而簡化建立信任關系的過程。WS-Federation 還規定了單一登錄和注銷過程,以及其他聯合實現概念。
WS-Federation 討論了有關聯合的諸多細節,其中有一部分專門介紹基於浏覽器的聯合,這種聯合依靠 HTTP GET 和 POST、浏覽器重定向以及 Cookie 實現目標。
被動聯合消息傳遞的某些方面主要基於 WS-Trust 規范。例如,在請求 STS 的安全令牌時,被動聯合采用與浏覽器兼容的“請求安全令牌”(RST) 和“RST 響應”(RSTR) 形式。在被動聯合方案中,我將 RST 稱為登錄請求消息,將 RSTR 稱為登錄響應消息。WS-Trust 規范側重於基於 SOAP(主動)的聯合,如 Windows 客戶端與 WCF 服務的聯合。
圖 1 是一個簡單的被動聯合方案。
圖 1 簡單被動聯合方案