WCF - Настройка аутентификации клиента / сервера в заголовках?

StackOverflow https://stackoverflow.com/questions/1801218

Вопрос

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

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

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

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

Что я хотел бы сделать, так это передать имя пользователя и пароль в заголовках для каждого запроса, передав обратно какое-либо исключение SecurityTokenValidationException при сбое или продолжив, если передано.

Спасибо.

Обновить

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

  <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 на сервере, поскольку я все еще получаю сообщение "...не удалось активировать". ошибка.

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top