ASP.NET跨域Cookie& Facebook Connect

时间:2010-07-20 00:54:24

标签: asp.net iis cookies facebook cross-domain

我有一个网站,我与Facebook集成(通过FBML - JavaScript API)。

我已按照正常情况在Facebook上设置应用程序,指定“连接网址”作为我网站的域名。

但是,我的应用程序在同一网站的IIS中有多个绑定

如:

  

www.bar.com.au

     

foo.com.au

域名完全不同,名称中没有任何关系 - 因此不可能使用正则表达式规则(即基本域名)。由于本地化和营销的结合,域名不同。请记住,这些域名已经存入已经存在的网站,换句话说,我无法更改此架构。

有没有办法可以在“连接网址”的 ONE Facebook应用程序设置中指定这些域名的 BOTH ?或者我必须创建多个应用程序吗?

当然我不能使用“Base Domain”设置,因为绑定不在同一个子域中。

我的网站实际上有大约7个绑定 - 所以我宁愿不必创建7个单独的Facebook应用程序 - 因为这意味着在我的应用程序中维护7组API密钥/密钥对。

alt text http://www.freeimagehosting.net/uploads/268b234e2f.png

当然,当我在foobar.com.au上时,域名无法使用Facebook Cookie。

与此同时,我将尝试创建多个ApiKey - 但我想我可能遇到问题。我将不得不去:“如果域是这个,请使用此ApiKey”,然后在每次调用Graph API时使用相同的逻辑。凌乱的东西。

所以我想我的问题/问题并非真正由Facebook Connect引起,它的设计是HTTP Cookie的本质。

如何轻松访问这些跨域的cookie?我是否需要设置一个第三个网站并将所有cookie逻辑指向那里?

3 个答案:

答案 0 :(得分:0)

您是否可以将其中一个设置为“Facebook身份验证”网站,并将所有与FB Auth相关的流量指向该网站,然后使用大量跨站点通信技巧之一将令牌发送到原始网站网站?

换句话说,无论他们来自哪个网站,您都会使用.foobar.com.au(例如)作为重定向URI。然后,当他们注意到他们来自.foo.bar.com.au时,他们进入该网站时,您将重定向他们回到他们来自以某种跨域方式传递访问令牌(querystring,post) vars等。)

答案 1 :(得分:0)

如果您希望允许*.foobar.com.au,请将基本域设置为foobar.com.au

答案 2 :(得分:0)

在我目前的情况下,时间框架阻止我做出正确的解决方案,这正是@Yuliy所强调的。

目前,我创建了多个Facebook应用程序。但为了保持干燥,我已经将所有这些都隐藏在暴露的属性背后了:

private static string _ApiToken_Site1, _ApiToken_Site2;
public static string ApiToken
{
   get
   {
       if (Site1) return _ApiToken_Site1;
       else if (Site2) return _ApiToken_Site2;
   }
}

不完全干净,但主要的是我根本不需要触摸我现有的代码,聪明才能确定使用哪个Api Key就属于该属性。

对于我们的下一个项目发布,我将废弃这个,并且很可能实现一个WCF / ASMX Web服务,该服务从一个地方处理身份验证(即单独域上的单独Web服务)。