2010-05-24 2 views
4

Один тест веб-сервер, со следующими приложениямиформ аутентификации, ASP.NET MVC и WCF RESTful службы

service.ganymedes.com:8008 - WCF RESTful службы, в основном выборки FormsAuth из WCF Starter Kit Preview 2

mvc.ganymedes.com:8008 - ASP.NET MVC 2.0 приложение

web.config для service.ganymedes.com:

<authentication mode="Forms"> 
    <forms loginUrl="~/login.aspx" timeout="2880" domain="ganymedes.com" name="GANYMEDES_COOKIE" path="/" /> 
</authentication> 

web.config для mvc.ganymedes.com:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" domain="ganymedes.com" name="GANYMEDES_COOKIE" path="/" /> 
</authentication> 

Попытка мой darndest, а GET (или POST по этому вопросу) с помощью JQuery в $ .ajax или getJson не посылает мой печенье (в соответствии с Firebug), так что я получаю HTTP 302 вернулся из службы WCF:

Request Headers 
Host    service.ganymedes.com:8008 
User-Agent  Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 (.NET CLR 3.5.30729) 
Accept   application/json, text/javascript, */* 
Accept-Language en-us,en;q=0.5 
Accept-Encoding gzip,deflate 
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive  300 
Connection  keep-alive 
Referer   http://mvc.ganymedes.com:8008/Test 
Origin   http://mvc.ganymedes.com:8008 

Он отправляется, когда отводом о на сайте MVC, хотя:

Request Headers 
Host    mvc.ganymedes.com:8008 
User-Agent  Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 (.NET CLR 3.5.30729) 
Accept   text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language en-us,en;q=0.5 
Accept-Encoding gzip,deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive  300 
Connection  keep-alive 
Referer   http://mvc.ganymedes.com:8008/Test 
Cookie   GANYMEDES_COOKIE=0106A4A666C8C615FBFA9811E9A6C5219C277D625C04E54122D881A601CD0E00C10AF481CB21FAED544FAF4E9B50C59CDE2385644BBF01DDD4F211FE7EE8FAC2; GANYMEDES_COOKIE=D6569887B7C5B67EFE09079DD59A07A98311D7879817C382D79947AE62B5508008C2B2D2112DCFCE5B8D4C61D45A109E61BBA637FD30315C2D8353E8DDFD4309 

I A lso установить одинаковые настройки в файлах web.config обоих приложений (самогенерируемые validationKey и decryptionKey).

На WCF связывания конфигурации, то FormsAuth пример не имеет явный <bindings> элемента, но я добавил это:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"> 
     <baseAddressPrefixFilters> 
      <add prefix="http://service.ganymedes.com:8008" /> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment>  
</system.serviceModel> 

или услуга не будет связываться вообще. Я могу использовать тот же URI данных, что и в вызове jQuery непосредственно в браузере, он отправит cookie, а WCF вернет данные. Я просто не могу использовать его в перекрестном вызове поддомена и включать файл cookie auth.

+0

Можете ли вы опубликовать свои настройки привязки wcf также – redsquare

+0

Уверенная вещь; добавлено. –

ответ

1

OK, я предполагаю, что это известное ограничение из-за безопасности (Same Origin Policy). Я знал о междоменных блоках, но я думал, что это будет нормально для субдоменов.

Я провел около 2 недель, исследуя WCF и REST (и используя MVC как веб-сервис RESTful), всегда с мышлением AJAX, и это никогда не возникало до времени реализации концепции доказательств. Идите фигуру.

Очевидно, что обычная аутентификация не будет работать через поддомены через AJAX. JSONP будет работать с формами аутентификации/куки, кажется, но не будет работать с базовой проверкой подлинности (я не хочу ограничивать себя HTTP GET в любом случае ...). Изменение документа. Домен не приседал для меня.

Я предполагаю, что в любом случае я должен поместить все в один и тот же домен или вручную отправлять данные аутентификации в качестве параметров запроса для каждого вызова, но оба этих решения выглядят как дерьмовые обходные пути (и это также не является более безопасным). Ну что ж.

Теперь я чувствую себя глупо.

Смежные вопросы