Совместное использование аутентификации с ASP.NET и Silverlight

#asp.net #silverlight #wcf #security

#asp.net #silverlight #wcf #Безопасность

Вопрос:

У меня есть ASP.NET веб-приложение, включающее несколько страниц silverlight. Во-первых, пользователи проходят аутентификацию с использованием общего ASP.NET веб-форма.

Это был бы типичный код для этого:

 FormsAuthentication.SetAuthCookie(this.txtUsername.Text, false);
FormsAuthentication.RedirectFromLoginPage(this.txtUsername.Text, false);
Response.Redirect("~/Private/Index.aspx");
  

Далее пользователь переходит на страницу, которая содержит страницу Silverlight. С этой страницы silverlight мне нужно безопасно вызвать некоторые службы WCF.

Сервис содержит этот код:

 [ServiceContract(Namespace = "http://mydomain")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class ServiceWCF
    {
        public ServiceWCF()
        {
            System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;

            Thread.CurrentPrincipal = HttpContext.Current.User;
        }

        [OperationContract]
        [PrincipalPermission(SecurityAction.Demand, Authenticated = true)]
        public List<Data> GetData()
        {
            // do things
        }
    }
  

И именно так я вызываю этот метод из клиента silverlight:

 MyWCFReference.ServiceWCFClient proxy = new MyWCFReference.ServiceWCFClient();

proxy.GetDataCompleted  = new EventHandler<MyWCFReference.GetDataCompletedEventArgs>(proxy_GetDataCompleted);
proxy.GetDataAsync();
  

Я следил за этой статьей, чтобы защитить свои веб-сервисы:
http://netpl.blogspot.com/2010_04_01_archive.html

Но когда я запускаю свой код, я получаю сообщение об ошибке: ошибка запроса основного разрешения.

Есть идеи о том, как это решить? Спасибо!!

Ответ №1:

Вероятно, вам потребуется настроить clientaccesspolicy.xml или crossdomain.xml файл в корневом каталоге домена, где размещена служба WCF, чтобы разрешить доступ к вашему приложению Silverlight.

Смотрите эту страницу MSDN для получения полной информации.

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

1. @xus — Ну что ж. Возможно, было бы неплохо добавить свой код, который пытается установить соединение.

2. проблема заключалась в том, что службы WCF находились в другом проекте (в одном и том же решении). Я переместил службы WCF в asp.net проект, и теперь он работает 🙂