Конфигурация безопасности интрасети WCF - PullRequest
2 голосов
/ 18 августа 2010

У нас есть несколько приложений (веб и WPF), которые вызывают службы WCF для доступа к данным. Мы не используем проверку подлинности Windows. Пользователю предлагается ввести имя пользователя и пароль при входе в веб-приложение или настольное приложение WPF. Данные не являются строго конфиденциальными (т.е. без кредитных карт, SSN и т. Д.).

Мы хотели бы использовать BasicHttpBinding для конечных точек WCF. Однако мы хотим передать имя пользователя и пароль нашим службам WCF, чтобы мы могли ограничить доступ к определенным данным в зависимости от пользователя.

Мой вопрос таков: поскольку мы на 100% в среде интрасети, было бы разумно просто передать имя пользователя и пароль пользователя в заголовке сообщений SOAP, чтобы мы могли аутентифицировать пользователей на стороне WCF? Это кажется очень распространенной ситуацией, и мне любопытно, как другие решают вопросы безопасности на стороне WCF, когда все приложения и службы находятся в среде интрасети.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 18 августа 2010

Это кажется довольно простой задачей, но на самом деле это довольно сложно, потому что команда WCF уже приняла решение, что отправка токена имени пользователя в виде простого текста по незащищенному каналу запрещена. Вы всегда можете отправить имя пользователя и пароль в настраиваемом заголовке SOAP, но в этом случае вы потеряете инфраструктуру безопасности WCF и вам придется внедрить собственный метод проверки пароля и т. Д.

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

Редактировать: Кстати. Помните, что большинство атак на безопасность было совершено инсайдерами, поэтому использование HTTPS - это не плохое решение, и оно сделает все намного проще.

1 голос
/ 18 августа 2010

Если вы используете wcf 3.5 sp1, вы можете разрешить ввод имени пользователя и паролей через небезопасную привязку, просто установите для параметра AllowInsecureTransport безопасного транспорта * значение true.

1 голос
/ 18 августа 2010

Да, это было бы разумно - ОДНАКО: вы должны зашифровать пароль, даже если вы находитесь в интрасети. Любой, кто использует сетевой анализатор, такой как WireShark, может видеть текст сообщения, и если вы не зашифровали пароль, то, даже если они являются сотрудниками, они смогут получить пароли, что полностью разрушит любую внутреннюю безопасность. То есть, если вы не доверяете своим сотрудникам настолько сильно, что имена пользователей и пароли на самом деле ничего не значат.

0 голосов
/ 18 августа 2010

Пароль никогда не следует отправлять в виде простого текста. Некоторые люди используют один и тот же пароль для разных вещей. Кража чьего-либо пароля может привести к серьезному случаю кражи личных данных, даже если ваше приложение никогда не будет взломано (и жертва даже не узнает источник утечки).

Существует причина, по которой пароли хешируются - даже компьютер не должен знать ваш пароль !

...