WCF - Настройка аутентификации клиент / сервер в заголовках? - PullRequest
0 голосов
/ 26 ноября 2009

У меня есть служба WCF, которая должна получать учетные данные клиента и поддерживать какие-то данные на основе ролей на основе моего метода аутентификации.

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

Я использую basicHttpBinding и прочитал несколько статей, таких как эта, http://nirajrules.wordpress.com/2009/05/22/username-over-https-custombinding-with-wcf%E2%80%99s-channelfactory-interface/,, которые описывают процесс.

Итак, что я ищу, так это если кто-то настроил полный клиент / сервер, чтобы посмотреть, чтобы я мог вывести свое собственное решение из этого.

Я хотел бы, чтобы имя пользователя и пароль передавались в заголовках для каждого запроса, возвращая некоторую исключительную ситуацию SecurityTokenValidationException при сбое или продолжая работу при передаче.

Спасибо.

UPDATE

Я использую привязку wsHttp со следующей конфигурацией как на клиенте, так и на сервере:

  <wsHttpBinding>
    <binding name="wsHttpEndpointBinding" >
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="Basic" />
        <message clientCredentialType="UserName" />
      </security>
    </binding>
  </wsHttpBinding>

И вызов к серверу с клиента следующим образом:

ServiceReference1.ServiceClient myClient = new ServiceReference1.ServiceClient();

myClient.ClientCredentials.UserName.UserName = "billuser";
myClient.ClientCredentials.UserName.Password = "mypassword";

Response.Write("Data from WCF Service: " + myClient.GetData(1));

Я думаю, что мне нужно немного помочь со связью CustomUsernamePasswordValidator на сервере, так как я все еще получаю «... не удалось активировать». ошибка.

1 Ответ

1 голос
/ 26 ноября 2009

Требуется ли использовать базовую HTTBBinding? Эта привязка действительно существует только для обеспечения поддержки устаревших реализаций WS-BasicProfile (то есть ASMX). Если ваши клиенты также .NET / WCF, я настоятельно рекомендую использовать wsHttpBinding, который предоставляет множество параметров безопасности из коробки. Вы можете использовать сертификаты, имя пользователя / пароль и т. Д. С безопасностью транспорта и / или сообщений, и вам не нужно самостоятельно писать какие-либо элементы безопасности. Просто настройте и работайте (CAG).

Информация об учетных данных безопасности доступна самой службе через OperationContext, если вам нужен прямой доступ к ней из вашего кода. Однако если вашему коду нужен доступ к нему, я бы порекомендовал написать поведение для извлечения соответствующей информации из OperationContext и помещения ее в нечто более специфичное для приложения, чтобы вам не приходилось ссылаться на System.ServiceModel везде, где вам нужен доступ. информация о OperationContext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...