Передача пользовательского объекта пользователя в WCF - PullRequest
0 голосов
/ 23 марта 2011

Я реализовал пользовательский поставщик членства ASP.net для проверки подлинности с помощью форм.Пользовательский поставщик использует пользовательский объект User для аутентификации и авторизации.Мне было интересно, могу ли я передать этот объект каждому вызову WCF, не добавляя его в список параметров?

Ответы [ 2 ]

1 голос
/ 23 марта 2011

Поскольку вы уже используете MembershipProvider, вы можете использовать его и в wcf, чтобы оба были защищены одним и тем же механизмом.

См. post в msdn.

Разработчики Windows Communication Foundation (WCF) могут использовать эти функции в целях безопасности.При интеграции в приложение WCF пользователи должны предоставить комбинацию имени пользователя и пароля клиентскому приложению WCF.Чтобы передать данные в службу WCF, используйте привязку, которая поддерживает учетные данные имени пользователя и пароля, например WSHttpBinding (в конфигурации, элемент wsHttpBinding), и установите тип учетных данных клиента равным UserName.В службе безопасности WCF аутентифицирует пользователя на основе имени пользователя и пароля, а также назначает роль, указанную ролью ASP.NET.

Другим вариантом может быть создание пользовательского IAuthorizationPolicyкоторый тянет вашего пользователя через

OperationContext.Current.IncomingMessageHeaders.GetHeader<T>

И затем настройте вашего принципала следующим образом:

evaluationContext.Properties[Constants.EvaluationContextPrincipal] = principal;

Вот еще немного информации о создании пользовательского IAuthroizationPolicy .С помощью этого метода вы можете достичь того, что вы хотите, не передавая своего пользователя в метод.

Просто предупреждаем если вы пойдете по этому пути, хитрый человек может в итоге выдать себя за пользователя, просто добавив в заголовок поддельного пользователя.

Использование поставщика членства asp.net для wcf, скорее всего, даст вам то, что вы есть на самом деле после того, как вы добавите немного безопасности.

0 голосов
/ 23 марта 2011

Определенно не следует добавлять это к параметрам каждого метода.

Я не знаю о вашем пользовательском объекте пользователя, но что касается WS * и большинства стандартов безопасности, ваш пользовательский объект будет иметь имя пользователя и пароль.

Ответ зависит от используемой вами привязки. BasicHttpBinding или BasicHttpContextBinding могут использовать схемы аутентификации HTTP, в то время как WsHttpBinding может использовать пользовательскую защиту сообщений, в которой вы можете указать имя пользователя и пароль.

BasicHttpContextBinding особенно хорош, поскольку он может работать с сеансом ASP NET.

...