Posted on 2009-03-18 02:35
leekiang 阅读(338)
评论(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,但是也意味着你的网站不再安全。