2010-07-06 2 views
1

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

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

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

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

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

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

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

OR (вероятно, лучший вариант)

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

Спасибо вам большое.

ответ

0

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

0
  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"]; 
} 

В App.xaml.cs

private void Application_Startup(object sender, StartupEventArgs e) 
{ 
    this.Resources.Add("UserId", e.InitParams["UserID"]); 
} 
+1

И люди должны быть в состоянии легко подделать пользователя, просто изменив html страницы с помощью firebug. –

+0

Я думал о таком подходе, просто нам также нужно добавить пароль пользователя (в этом случае пользователь сможет использовать только свои данные) ... Но не уверен, что прохождение учетных данных пользователя в html - хорошая идея. – Budda

0

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

0

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

+0

Услуги WCF RIA (переименованы в .NET RIA Services) требуют проекта веб-приложений (но мой веб-сайт) ... Вот почему я не хочу их использовать ... но, вероятно, это была бы хорошая идея, по крайней мере, посмотреть, какой подход используется там ...? – Budda

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