asp.net forms 身份验证方式下跨域登录信息共享的实现方法

背景:之前我在公司做了一个用户管理后台,是基于 asp.net forms 身份验证的方式实现的。最近有同事提出需将他的管理后台加入到我的管理后台中,避免内容部门的同事因内容管理的需要四处登录。出于某种原因,他的程序又必须放在另外一台机器另外一个站点的某个目录下,开发工具均为 vs2008 。经过一番折腾,终于弄好了。现将过程记录下来以备忘。
下面假设我已做好的站点为 A(http://a.abc.com),同事要加入的站点为 B 站(http://b.abc.com/)的虚拟目录 xxx 。方法是配置 A, B  站的 web.config .
1.配置 system.web/machineKey 节点。务必保持2个站点的此节点完全一致; 可参见: http://www.aspnetresources.com/tools/keycreator.aspx 生成
2.2个 web.config 都配置为 forms 验证方式( system.web/authentication 节);
3.2个 web.config 节都配置 system.web/httpCookies  为 <httpCookies domain=".abc.com"/> ;我认为这是很关键的一步,开始配置没有成功,在网上找了相关资料都没有详细说明这个,在实际使用中却不能生效。后来我用 firefox 的 HttpFox 插件前后查看,仔细对比,原来在 A 站点登录的地方通过配置后会生成两个名称相同但所属于的域名不同的 cookie  , 一个是默认站点 a.abc.com ,另一个是配置的 .abc.com ; B 站点就通过配置的域名 cookie 获取到 。
完整的配置如下:
身份验证配置节
<!-- 身份验证配置节 -->
      
<authentication mode="Forms">
        
<forms loginUrl="~/default.aspx" defaultUrl="~/mainIndex.aspx" name=".mymanage"
               protection
="All" domain=".abc.com"
               path
="/" slidingExpiration="true" timeout="60"></forms>
      
</authentication>

      
<machineKey 
validationKey="EF936296B4B062FFD6B7074C0501D7CCEFB50C19A75613AEEC603B4EF5F42AEDC463FDE81707795DDAA5FD4AA0D88CC30E9D413699A7E814358876FC9E75B883"
decryptionKey
="948F668DFEEC39CB8BF07E222BFEED5C5B5B9FF427E0F92976534EE8D517F325"
validation
="SHA1"
decryption
="AES"
/>

      
<authorization>
        
<deny users="?"/>
      
</authorization>
      
<httpCookies domain=".abc.com"/>
  
<!-- End 身份验证配置节 -->


posted on 2010-01-28 16:47  感恩的心  阅读(3627)  评论(4编辑  收藏  举报

导航