需求:
系統A與系統B分別部署在不同域的兩臺服務器中,但它們的身份都統一在身份認證服務器中;身份認證信息以Session方式存貯于各自系統中,并輔以cookie進行使用。
當用戶在A系統登錄后,訪問B系統時,由于是跨域訪問,導致身份信息不能正確的傳遞到B系統中,從而致使用戶需在B系統中重新登錄。
解決方案:
處理這類跨域訪問時,我們最先使用從B系統向C通過HttpRequest(類AJAX請求)的方式獲取身份信息,此方式好處是同步處理,方便用使用;但其限制諸多,如需設置信任站點、用戶訪問確認等,甚至,在對應用服務器作了一次安全升級后,根本無法訪問了。因此,需另行開辟途徑,于是,在同事建議下,我們使用IFrame內嵌跨域驗證網頁,來解決此問題。
1、原理設計:用戶在訪問B系統時,先使用一內置的iframe,并將iframe的src指向身份認證服務器系統代理驗證接口;如果用戶已經在A系統中進行過登錄,即A域了中已存在著身份認證信息后,身份認證服務器中也將具有其身份信息將其附帶著身份認證信息后重定向訪問B系統代理接口;B系統代理驗證接口在接收到由A系統傳遞而來的身份認證信息后,通過身份認證服務器驗證后,在B系統所在域重建身份認證信息。
2、實現邏輯貼碼:
1)B系統代理驗證接口:
(1)IFrame邏輯貼碼:
(2)JS檢測是否通過認證邏輯貼碼:
2)身份認證服務器端接口(JSP):
3、注意事項:
1)由于身份認證中心使用cookie作為身份標識,因此,需要用戶在瀏覽器中允許使用cookie的設置;
2)由于在iframe中進行跨域重定向,因此需在IE安全中的跨域瀏覽子框架項設為啟用:
4、源碼文件:
……