ASP.NET Междоменные файлы cookie и Facebook Connect

#asp.net #iis #cookies #facebook #cross-domain

#asp.net #iis #файлы cookie #Facebook #междоменный

Вопрос:

У меня есть веб-сайт, который я интегрирую с Facebook (через FBML — JavaScript API).

Я настроил приложение на Facebook в обычном режиме, указав «URL подключения» в качестве домена моего веб-сайта.

Однако мое приложение имеет несколько привязок в IIS для одного и того же веб-сайта.

Такие как:

www.bar.com.au

foo.com.au

Домены совершенно разные, в названии нет никакой связи вообще — поэтому правило в стиле регулярных выражений невозможно (т.Е. базовый домен). Домены были сделаны разными из-за сочетания локализации и маркетинга. Имейте в виду, что эти домены подключены к уже действующему веб-сайту, другими словами, я не могу изменить эту архитектуру.

Есть ли способ указать ОБА этих домена в настройках приложения ONE Facebook для «URL подключения»? Или мне придется создавать несколько приложений?

Конечно, я не могу использовать параметр «Базовый домен», поскольку привязки находятся не в одном поддомене.

На самом деле у меня на моем веб-сайте около 7 привязок, поэтому я бы предпочел не создавать 7 отдельных приложений Facebook, потому что это означает поддержание 7 наборов пар API key / secret в моем приложении.

альтернативный текст http://www.freeimagehosting.net/uploads/268b234e2f.png

Что происходит, конечно, когда я на foobar.com.au файлы cookie Facebook недоступны для домена.

Тем временем я попытаюсь создать несколько APIKEY’ов, но, думаю, у меня могут возникнуть проблемы. Мне придется сказать: «Если домен этот, используйте этот ApiKey», затем та же логика в каждом отдельном вызове Graph API. Грязный материал.

Так что я предполагаю, что моя проблема / вопрос на самом деле вызван не Facebook Connect, а природой HTTP Cookies по дизайну.

Как я могу легко получить доступ к этим файлам cookie из разных доменов? Нужно ли мне настраивать третий веб-сайт и направлять всю логику файлов cookie туда?

Ответ №1:

Если вы хотите, *.foobar.com.au чтобы они были разрешены, затем настройте свой базовый домен на foobar.com.au .

Комментарии:

1. Отредактированный вопрос — домен не всегда содержит Foobar. Вот что происходит, когда вы «перегружаете» код, смехотворно.

2. Могу я спросить, каков ваш вариант использования для нескольких базовых доменов?

3. У нас есть несколько версий нашего веб-сайта для разных языков. Итак, в Австралии наш домен может быть australia.foo.bar.com и в Америке это может быть www.foobar.com. Не собираюсь рисковать этими доменами — они были проданы таким образом, поэтому не могу изменить их сейчас.

Ответ №2:

Не могли бы вы настроить один из них в качестве своего сайта «Facebook Authentication» и направлять туда весь трафик, связанный с FB Auth, а затем использовать один из большого количества способов межсайтовой связи для отправки токена на исходный сайт?

Другими словами, независимо от того, с какого сайта они поступают, вы будете использовать .foobar.com.au (например) в качестве URI перенаправления. Затем, когда они заходят на этот сайт, вы отмечаете, что они пришли с .foo.bar.com.au вы перенаправите их обратно туда, откуда они пришли, передавая токен доступа некоторым междоменным способом (строка запроса, переменные post и т.д.)

Комментарии:

1. Не могли бы вы пояснить, пожалуйста? Также обратите внимание, что я использую JavaScript API для аутентификации, поэтому мне нужен доступ к файлам cookie в домене.

2. да .. я тоже действительно смущен этим ответом. Не могли бы вы, пожалуйста, пояснить, что вы имеете в виду? В чем хитрости межсайтового взаимодействия ?

3. Приемы межсайтовой связи включают в себя использование какого-либо механизма для передачи данных с одного сайта на другой, что, как предполагается, усложняет политика одного и того же источника. Одним из методов является межсайтовый запрос POST (он же отправка формы). Другим является перенаправление с токеном доступа в строке запроса.

4. Спасибо за разъяснение. Я понимаю, о чем вы сейчас говорите. На самом деле, вероятно, лучше всего настроить независимый сервер авторизации (веб-службу ie). На самом деле это невозможно для тех временных рамок, которые у меня есть на данный момент. Я действительно не хочу передавать запросы querystring / post между серверами, потому что это добавляет зависимость от одного из серверов, где на самом деле это не работа сервера. Спасибо за советы — я рассмотрю лучшее решение, когда мы обновим проект (что произойдет в ближайшее время). На данный момент я просто собираюсь использовать несколько ключей api / logic smarts.

Ответ №3:

В моей текущей ситуации временные рамки помешали мне найти правильное решение, на что и обратил внимание @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 использовать, в этом свойстве.

Для нашего следующего выпуска проекта я откажусь от этого и, скорее всего, внедрю веб-службу WCF / ASMX, которая обрабатывает аутентификацию из одного места (т. Е. отдельную веб-службу в отдельном домене).