最近在做一個項目,需要使用 simplesamlphp 作為身份提供商 (idp),與一些使用 ws-federation 協議的應用程序進行集成。這意味著我們需要實現 ws-federation 協議,這對于我們團隊來說是一個全新的領域。在查閱了大量的文檔和示例后,我們發現手動實現 ws-federation 協議非常復雜,需要處理各種細節,包括消息格式、簽名驗證、安全令牌等等。這不僅耗時,而且容易出錯。
幸運的是,我們發現了 simplesamlphp/simplesamlphp-module-adfs 模塊。這個模塊專門用于將 SimpleSAMLphp 轉換為 WS-Federation IDP,簡化了集成過程。
安裝 simplesamlphp/simplesamlphp-module-adfs 模塊非常簡單,只需使用 composer:
vendor/bin/composer require simplesamlphp/simplesamlphp-module-adfs
安裝完成后,我們需要啟用該模塊。打開 config.php 文件,找到 module.enable 鍵,并將 adfs 設置為 true:
'module.enable' => [ 'adfs' => true, // ...其他模塊 ],
接下來,我們需要配置 IDP 和信賴方 (SP)。模塊的 metadata-templates 目錄下提供了一些示例配置文件,可以根據實際情況進行修改。adfs-sp-remote.php 文件用于配置信賴方,其中的 realm 類似于 SAML 中的 entityId。
立即學習“PHP免費學習筆記(深入)”;
在使用 WS-Federation 時,需要注意一些概念。realm 類似于 SAML 中的 entityId,用于唯一標識一個信賴方。IP STS 類似于 IDP,負責頒發安全令牌。
此外,一些 WS-Federation 信賴方應用程序可能需要比應用程序會話更長的斷言生命周期。如果斷言生命周期過短,應用程序會頻繁地將用戶重定向到 IDP 重新登錄。SimpleSAMLphp 的默認斷言生命周期為 5 分鐘,而 sharepoint 默認需要 10 分鐘。可以使用 adfs-sp-remote.php 文件中的 assertion.lifetime 參數來設置斷言生命周期,確保其大于 SharePoint 中設置的值(可以通過調整 LogonTokenCacheExpirationWindow 來配置 SharePoint 的斷言生命周期)。
使用 simplesamlphp/simplesamlphp-module-adfs 模塊,我們成功地將 SimpleSAMLphp 集成到 WS-Federation 環境中,簡化了開發和部署過程。該模塊的主要優勢包括:
- 簡化 WS-Federation 集成: 無需手動實現復雜的 WS-Federation 協議,大大降低了開發難度。
- 易于配置: 提供了示例配置文件,可以根據實際情況進行修改。
- 靈活的斷言生命周期控制: 可以根據信賴方應用程序的需求,靈活地配置斷言生命周期。
總而言之,simplesamlphp/simplesamlphp-module-adfs 模塊是 SimpleSAMLphp 與 WS-Federation 應用程序集成的理想選擇。它簡化了開發過程,提高了效率,并提供了靈活的配置選項。