跨域认证简单解决方案-使用第三方Cookie概述跨域认证,意味着用户在一个入口登录后可以无障碍的漫游到其它信任域。也就是所谓的单点登录(SSO)。对于大型的服务提供着,常用的方法有:使用安全断言标记语言(SAML)、基于公开密钥技术(PKI-PubicKeyInfrastructure)的Kerberos网络认证协议或者使用Windows采用的认证方案LanManager认证(称为LM协议-对于NT安装ServicePack4以后采用NTLMv2版本)。这些认证方式需要单独的认证服务器,对于普通的使用者来说,既难已实现,也不太可能搭建单独的服务器。有没有一种简单又安全的认证方式呢?本文的目标使用Cookie和SHA1结合实现简单又安全的认证,如用户在a.cn中登录后,无需再次登录就可以直接使用b.cn中提供的服务。Cookie是什么Cookie是由Web站点创建的小文本文件,存储在您的计算机上。这样,当您下一次访问该站点时,它可以自动获取有关您的信息,例如浏览喜好,或您的姓名、地址及电话号码。关键词SSO(SingleSign-On)-单点登录SAML(SecurityAssertionsMarkupLanguage)-安全断言标记语言Cross-RealmAuthentication-跨域认证PKI(PubicKeyInfrastructure)-公开密钥技术SHA1(SecureHashAlgorithm1)-安全哈希算法1P3P(ThePlatformforPrivacyPreferences)隐私参数选择平台单一认证模型1、用户使用a_logon.aspx登录服务器a.cn2、在a_logon.aspx中自动嵌入iframe其src指向b.cn的b_auth.php3、a.cn认证成功后在客户端写入Cookie,通过iframe调用b_auth.php传递认证参数(经过SHA1后)4、b_auth.php认证成功后在客户端写入认证Cookie5、完成a.cn和b.cn的统一认证问题:上面提到的过程如果使用FireFox浏览器b_auth.php能够成功写入Cookie,如果使用IE6.0及以上版本b_auth.php写入Cookie失败。原因:IE6.0支持P3P,IE6的缺省隐私等级设置为中——即阻止没有合同隐私策略的第三方cookie。而在用户浏览a_logon.aspx时a.cn写入的为第一方Cookie,其嵌入的iframe指向b_auth.php这时b.cn写入的就为第三方Cookie了,所以它是被IE当在了大门外。解决方法:让用户改变IE安全策略,允许第三方Cookie,这似乎很简单,可是用户会听你的吗?另一种解决方法使用P3P,在b_auth.php中添加P3P头。网上google一下好像很多,本着不求甚解的原则Copy来就是了。如下:header('P3P:CP=CURaADMaDEVaPSAoPSDoOURBUSUNIPURINTDEMSTAPRECOMNAVOTCNOIDSPCOR')实现代码a_logon.aspx(C#伪代码)//////////////////////////////if(!Page.IsPostBack)return;if(VerifyPassword(sPwd)){stringsSalt=CreateSalt(12);Session.Add(User,sName);Session.Add(Salt,sSalt);stringsHash=Hash(sName+sPwd+sSalt,SHA1);Session.Add(Passport,sHash);stringsR=iframeid='aa'src='=%sName%&salt=%sSalt%&passport=%sHash%'width='0'height='0'/iframe;Response.Write(sR);}/////////////////////////////////////////////b_auth.php----------------------------------------?php//---------------------------//cookieauthinmulti-domain//Author:Lazenlau//Mail:lazen_cn@hotmail.com//History://2007-05-1710:00release1.0//Copyright(C)2007//---------------------------header('P3P:CP=CURaADMaDEVaPSAoPSDoOURBUSUNIPURINTDEMSTAPRECOMNAVOTCNOIDSPCOR');$user=$_REQUEST['name'];$salt=$_REQUEST['salt'];$passport=$_REQUEST['passport'];$hr=authfailed;if(!empty($passport)){//getusrpwd$pwd=888888;//md5$src=$user.$pwd.$salt;$auth=strtoupper(sha1($src));if($auth==$passport){setcookie(ticket,$passport);$hr=authsuc;}//else//$hr=$user.a=.$auth.s=.$passport;}echo$hr;?-----------------------------------------------------------------------------结束语上面演示的跨域认证方式,需要b.cn中保存有用户的口令,这往往也带来麻烦,一种改进方式是b_auth.php在认证用户时可以使用调用a_auth.aspx在a.cn中完成再次认证,也可以使用SOAP或者XMLHttpRequest进行认证。参考资料GoogleAdSense=zh_CNP3P安全:使用SAML确保可移植的信任(电子商务访问控制解决方案):IBMTivoli是业界领先的管理技术软件,是IBMIT服务管理的核心部分。Tivoli是唯一一个跨越主机系统、客户机/服务器系统、工作组应用、企业网络、Internet服务器的端到端的解决方案。Tivoli软件以IBM的世界级服务、支持和研究为坚强后盾,为客户提供一个无缝集成、灵活的随需应变基础架构管理解决方案,采用强健的安全机制将雇员、业务伙伴和客户连接起来。Tivoli软件能够使企业降低总体拥有成本,提高IT基础架构的管理及服务水平。Tivoli解决方案主要包括系统管理解决方案,存储管理解决方案和安全管理解决方案。IBMTivoliAccessManagerfore-business是一个获奖的、基于策略的电子商务访问控制解决方案和Gartner的MagicQuadrant中处于领先地位的企业应用程序。它可以帮助您管理日益发展和日渐复杂的电子商务,控制不断攀升的管理成本,解决在大量Web和应用程序资源中安全策略实施方面的难题。TivoliAccessManagerfore-business与电子商务应用程序集成在一起,以即装即用(out-of-the-box)的方式提供一种安全、统一和个性化的电子商务体验。通过提供身份验证和授权API并与应用程序平台(如J2EE™)集成在一起,TivoliAccessManagerfore-business能帮助您安全地访问业务关键型应用程序和分散在扩展企业中的数据。通过使用AccessManager跨域单一登录(SSO)技术和安全断言标记语言(SecurityAssuranceMarkupLanguage,SAML)以及其他标记传递(token-passing)协议,基于Web的SSO可以跨越多个站点或者多个域。产品要点:在保护单个企业或联邦环境的安全时,为电子商务计划提供统一的身份验证和授权。在采用Web、Microsoft、telnet和主机应用程序环境中支持单一登录。在基于标准的Java2EnterpriseEdition(J2EE)应用程序支持下,可以快速和可伸缩地部署Web应用程序。通过新支持的Java2、z/OS上的Java身份验证和授权(JavaAuthenticationandAuthorization,JAAS)API以及z/OS上的WebSphere,改进了对主机应用程序的支持。通过高伸缩性的代理体系结构和/或易于安装的Web服务器插件、基于规则和角色的访问控制、对主要用户注册中心和平台的支持以及可用于进一步定制安全性的高级API,提供了设计的灵活性。通过提供统一的身份和安全管理,降低了应用程序开发、部署和管理的成本。通过IBM在Web安全标准开发方面的领导地位,保持将来安全和身份管理的连续性。TivoliAccessManagerfore-business允许您定义综合策略,并基于该策略管理安全性,而无论该策略是基于用户角色的还是基于业务规则的。您可以根据每个用户的职责,授予员工、合作伙伴、供应商和客户动态的、基于角色的访问权。您可以将用户分组并向组指派权限,简化跨多个应用程序和资源的访问控制管理。业务规则在运行时进行求值,并保存在应用程序以外,这样就允许更改影响访问的策略参数,而无需重写和重新编译应用程序--这种特性有助于动态提高应用程序部署和适应的速度。应用程序平台(如WebServers)向应用程序开发人员提供安全性和其他服务。但是这样的话,管理访问权就像竖井(silos)一样与业务线(lines-of-business)隔离开来,它依赖于每个应用程序环境中可用的技术和工具。为了使业务能在随需应变的模式下运作,TivoliAccessManager提供了一个关键功能作为公共服务,即面向服务的体系结构(Service-OrientedArchitecture,SOA)。TivoliAccessManagerfore-business为异构环境提供安全性。采用该体系结构后,访问控制所基于的层是单一且前后一致的,这样可以快速部署应用程序,与安全孤岛方法相比,可以更加准确而一致地管理安全性。TivoliAccessManagerfore-business通过下列方法提供自我保护环境:使用单个安全策略服务器强制实施跨多个文件类型、应用程序提供商、设备和协议的安全性,从而防止未授权的访问。WebSSO,保持密码和用户的完整性。用于发现问题或潜在问题的健壮的审计和信息收集工具。还通过下列方法提供了自我优化环境:负载均衡和自动反映Web对象空间。基于开放标准的高可用性和高伸缩性体系结构。TivoliAccessManagerfore-business是IBMIdentityManagement解决方案的集成部件,可以帮助您在线获得用户、系统和应用程序,并能提高生产效率,还可以保持动态顺应性以便增加IT环境的弹性和安全性,同时有助于减少成本并最大化投资回报率。TivoliAccessManager是第一个接受CommonCriteriaCertification(EAL3)的解决方案,它满足严格的国际上认可的安全标准。IBMTivoliIdentityManager是一种用于管理用户和帐户定义的产品。通过控制系统上的帐户定义,它允许公司控制用户能够访问哪个系统。IBMTivoliAccessManager是一种访问控制产品。它通过强制实施访问控