Posted on 2009-03-18 02:35
leekiang 閱讀(350)
評論(0) 編輯 收藏 所屬分類:
sso
PKI是解決開放式互聯網絡信息安全需求的成熟體系。PKI體系支持身份認證,信息傳輸、存儲的完整性,消息傳輸、存儲的機密性,以及操作的不可否認性。
一個用jsp開發的web應用,使用了session作為sigle sign on的實現。在用firefox瀏覽時沒有問題,用IE 6瀏覽時剛開始也可以,點過幾次后就會出現session lost的錯誤。
檢
查發現IE6瀏覽時,web服務器端日志記下的sissionid變了。由于sessionid一般存在于cookie,推測是IE的cookie機制導
致的問題。考慮到這個應用使用了frameset,參考文章:http://support.microsoft.com
/default.aspx?scid=KB;EN-US;Q323752
在frameset里面,也就是里面的frame是來自第三方
站點(不同IP或不同域名),那么默認情況下IE會自動禁用這些站點的cookie,也就是 在請求某url時在HTTP
header里不發送它們的cookie,包括session的cookie。注意,這些站點在response里面設置的cookie還是會被發送到瀏
覽器的。
那么,解決的辦法,自然是對frame里面的第三方站點的response header里面添加一個確認信息,在MSDN里面有個最簡單的解決辦法:response.addHeader("P3P","CP=CAO PSA OUR")。response.setHeader("P3P","CP=CAO PSA OUR");
最簡單的辦法,是用一個filter,對所有路徑下的uri,都設置response.setHeader("P3P","CP=CAO PSA OUR")。
上面是microsoft提供的辦法,以下是likebao的辦法:tomcat關閉cookies,用URL重寫傳遞sessionid。
1.tomcat關閉cookies,強制使用URL Rewriting
增加E:\jakarta-tomcat-5.0.28\conf\Catalina\localhost\XXApp.xml
內容如下:
<Context path="/XXApp" docBase="${catalina.home}/webapps/XXApp"
??????? debug="0" privileged="true" cookies="false">
</Context>
2.URL重寫傳遞seesionid
??? <%
??? ??? ??? String sid=session.getid();
??? ?? ?? ?? response.redirect("xxxx123.jsp;jsessionid="+sid);
??? %>
p3p是微軟的隱私策略,通常情況下跨域iframe或者frameset默認采用的隱私策略為“中”,該級別的策略拒絕保留session。CAO PSA OUR則意味著你同意跨域保留session,但是也意味著你的網站不再安全。