Silverlight + ASP.NET MVC + проверка подлинности с помощью форм = отсутствие проверки подлинности в WCF - PullRequest
0 голосов
/ 10 мая 2011

У меня есть стандартный сайт ASP.NET MVC с аутентификацией форм. Пользователи входят через веб-страницу. Тогда они могут добраться до приложения Silverlight. Когда они входят в систему, я передаю им файл авторизации форм, как и любой другой сайт:

 FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);

Файл XAP находится в папке ~ / ClientBin /. Файл SVC находится в папке ~ / Services /. Анонимный доступ заблокирован:

<configuration>
   <system.web>
     <authorization>
       <deny users="?"/>
     </authorization>
   </system.web>
</configuration>

При вызове Silverlight к SVC HTTP 302 возвращается на страницу входа и происходит сбой Silverlight. :( Это происходит только когда анонимный доступ отключен. Я думаю, что Silverlight НЕ передает cookie вместе с вызовом службы WCF. Почему бы и нет?

Я убедился, что использовал AspNetCompatibilityRequirements, как определено в документации (http://msdn.microsoft.com/en-us/library/dd560702(VS.95).aspx):

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class TaskSchedulerService : ITaskSchedulerService
{

и мой web.config имеет

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
</system.serviceModel>

То же самое происходит при использовании basicHttpBinding или customBinding с включенным BinaryCompression.

1 Ответ

0 голосов
/ 21 мая 2011

Хорошие новости! Я нашел проблему ... Мое приложение Silverlight было запрограммировано так, чтобы оно вставляло точку "." в URL, когда он вызвал веб-сервис на localhost (http://localhost/myservice.svc -> http://localhost./myservice.svc).

Я специально добавил эту дополнительную точку, чтобы я мог отлаживать локальный трафик с помощью Fiddler. Я удалил точку, и аутентификация работает! Дополнительная точка была воспринята как отдельный домен.

Оказывается, что с INTERNET EXPLORER 9 FIDDLER МОЖЕТ ОТЛАДИТЬ ЛОКАЛЬНЫЙ ТРАФИК БЕЗ ТОЧКИ.

Как сказано в документации MSDN:

Чтобы использовать службу из приложения Silverlight, никаких специальных действий не требуется. Вызовите службу так же, как вы бы вызвали незащищенный сервис. При вызове службы, если пользователь не вошел на сайт ASP.NET, на котором размещено приложение Silverlight, или если пользователь не авторизован для вызова службы, произойдет ошибка. Таким образом, особенно важно корректно обрабатывать ошибки при использовании безопасных сервисов.

Итог: если вы разрабатываете Silverlight, IE9 - ваш лучший друг.

...