WCF - Настройка аутентификации клиента / сервера в заголовках?
-
05-07-2019 - |
Вопрос
У меня есть служба 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.