实现关于跨二级域名和1.1和2.0版.net Forms身份验证体制的问题和解决办法.
公司平台是很多2级名系统构成。以前都是vs2003开发的,所以在member.domain.com中登录后,在bbs.domain.com中可以读取登录的状态和用户信息.
现在我们打算用vs2005升级部分模块,但是我在做了biz.domain.com后发现读不到member.domain.com登录后的信息了. biz.domain.com和bbs.domain.com中采用的技术和配置是一模一样的.只是开发工具不一样,为什么vs2005开发的就读不出来了? 直接request Forms验证的cookie也不行. 不过request vs2003直接写入的cookie可以读到.
我的webconfig中:
<authentication mode="Forms">
<forms loginUrl="/Member/Account/UserLogin.aspx" timeout="40" name="OperateUser" protection="All" path="/"/>
</authentication>
<machineKey
validationKey= "B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
decryptionKey= "BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
validation="SHA1">
</machineKey>
所有项目中都一样的.现在关键是直接Request.Cookie["OperateUser"]都为null
奇怪.我把biz.domain.com的webconfig的Forms的name换成别的。就可以request出member.domain.com的Forms的Cookie.
但是,将这个cookie解密成Titck时候却失败.提示:Length of the data to decrypt is invalid. .不知道是不是1.1和2.0的Forms不兼容?
把解决办法提供出来供应大家备查:
在2.0中新增加了 "decryption" attribute .所以在biz.domain.com的web.config中要新增加这个attribute :
<machineKey
validationKey= "B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
decryptionKey= "BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
decryption="3DES"
validation="SHA1">
</machineKey>