WCF-сервис: как авторизовать пользователя - PullRequest
1 голос
/ 06 июля 2010

WCF-сервис размещен на веб-сайте ASP.NET. Членство в ASP.NET на сайте не используется. Пользователь вошел в систему с помощью «пользовательской» страницы, идентификатор зарегистрированного пользователя сохраняется в сеансе (HttpContext.Current.Session).

WCF-сервис используется приложением Silverlight (4 версия).

Как проверить, авторизован ли текущий пользователь (загруженное приложение Silverlight) для доступа к определенному WCF-методу?

Я вижу несколько вариантов:

  1. Во время запроса к WCF-методу проверьте, содержит ли объект HttpContext.Current.Session идентификатор пользователя. Этот метод не работает для меня ( HttpContext.Current в службе WCF во время второго запроса ).
  2. Использовать OperationContext - я не знаю, как его использовать.

Не могли бы вы:

а. посоветуйте мне, как решить любую из перечисленных выше проблем;

ИЛИ (возможно, лучший вариант)

б. предложите мне любой другой подход.

Большое спасибо.

Ответы [ 4 ]

0 голосов
/ 08 июля 2010

Это волшебство ... теперь HttpContext.Current не равен нулю при каждом запросе ... не знаю почему ... Если вы знаете, почему это возможно - пожалуйста, дайте мне знать.И я могу использовать его для авторизации пользователя ...

0 голосов
/ 07 июля 2010

Я полагаю, что вы можете использовать OperationContext и отправлять cookie-файлы сеанса вместе с запросом WCF.На стороне сервера он либо восстановит правильный HttpContext.Current.Session, либо вы сможете сделать это вручную.

0 голосов
/ 07 июля 2010

Взгляните на встроенный шаблон Silverlight 4 Business - он содержит проверку и авторизацию пользователей, использующих службы WCF RIA.

0 голосов
/ 07 июля 2010
  1. Вы можете передать HttpContext.Current.Session [" YourUserID "] в приложение Silverlight 4, как в InitParameter;
  2. добавить это значение к ресурсам приложения, чтобы оно было доступно в приложении SL;
  3. и передать его службе WCF в качестве параметра при вызове метода;
  4. подтвердить, если этот пользователь авторизован

Вот пример:

Для страницы, на которой находится элемент управления silverlight:

protected void Page_Load(object sender, EventArgs e)  
{  
    this.Silverlight1.InitParameters = "UserID" + HttpContext.Current.Session["UserID"];  
}  

В приложении. Xaml.cs

private void Application_Startup(object sender, StartupEventArgs e)  
{  
   this.Resources.Add("UserId", e.InitParams["UserID"]);  
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...