Как мне создать безопасный веб-сервис с .Net? - PullRequest
8 голосов
/ 19 марта 2009

Мне нужно создать простой веб-сервис для ввода и вывода данных из системы управления персоналом через Интернет (это хост-решение). Я использую IIS и ASP.Net с .Net 2.0.

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

Вот методы, которые я знаю:

SoapHeaders через SSL

Разместите UID / PWD в заголовке Soap и внедрите расширение SOAP ( ссылка ).
Довольно прост в реализации и должен быть достаточно безопасным по SSL. Это, безусловно, мой предпочтительный вариант из-за относительной простоты. Кроме того, по историческим причинам мне нужно будет использовать веб-сервис из VBScript для всех вещей, поэтому возможность иметь дело только с простым SOAP является бонусом. Однако есть ли какие-либо предостережения? Я собираюсь попросить клиентов жаловаться, что это угроза безопасности?

Использование WCF с TransportWithMessageCredential

Я нашел много старых статей, относящихся к WS, и если я не ошибаюсь, это то, что теперь предусмотрено в WCF? Эта ссылка Microsoft содержит учебник для начинающих.
Если я правильно понимаю, для аутентификации используется безопасность на основе сертификатов между клиентом и сервером. Это правильно, или я правильно понял?
Я подозреваю, что это будет гораздо большая работа, по крайней мере, в плане реализации. Кроме того, я не смогу получить доступ к веб-сервису напрямую из VBScript, поэтому мне придется написать вызов dll it call, а затем развернуть его локально - правильно?
Это доступно даже в .Net 2.0?

Другие методы

  • Я могу запретить анонимный доступ к ASMX-файл и использовать полагаться на IIS для сделать аутентификацию через вызов / ответ. Это на самом деле практично в моем сценарии, но чувствует очень не элегантно (и не знаю, как сделать эту работу из VBScript либо).
  • Передача UID в вызов метода бедный двоюродный брат SoapHeader так Я не буду этим пользоваться.

Буду очень признателен за любые советы по наилучшему подходу к этой проблеме. Если у кого-то есть хороший аргумент, почему мыльные заголовки безопасны, то я хотел бы услышать его, так как это кажется самым простым в использовании, если оно «достаточно безопасно» .

Ответы [ 5 ]

3 голосов
/ 19 марта 2009

Вам настоятельно рекомендуется использовать IIS и Windows для обеспечения аутентификации. IIS может сопоставлять входящие запросы пользователю AD (NTLM, сертификаты, Kerberos и т. Д.). Оттуда у вас будет WindowsPrincipal , который вы можете использовать, чтобы потребовать, чтобы пользователь был в группе. Если вы не против собрать имя группы в коде, вы даже можете использовать PrincipalPermissionAttribute в своих методах обслуживания, чтобы оно было полностью декларативным.

Используя Windows, вы получаете платформу для решения всех проблем безопасности. Пароли не будут передаваться в виде простого текста, и вам не нужно будет создавать и указывать свою собственную систему типа «запрос / ответ» (хм). Разные клиенты могут проходить аутентификацию разными способами (для одних требуются сертификаты, для других - NTLM).

Наконец, у вас будет меньше кода, поскольку вы можете использовать Windows для управления пользователями и .NET Framework для проверки безопасности.

Edit:

Может быть, вы думаете, что защита ASMX - это хак, потому что это единственный шаг, на который вы смотрите? Я бы согласился! Веб-сервис, который зависит только от того, что вы отрицаете анонимность, звучит очень слабо. Сам код веб-службы должен требовать членства в группе после аутентификации. Таким образом, если вы неправильно настроили сервер, вы сделали его недоступным, а не небезопасным.

1 голос
/ 20 марта 2009

Используйте WCF. Для него требуется .NET 3.0 или выше (точно также используйте 3.5 SP1), но это просто .NET 2.0 с парой пакетов обновлений и некоторыми новыми сборками, так что это безопасно.

Я рекомендую не использовать веб-сервисы ASMX для новых разработок, если нет выбора.

Возможно, вы читали о "WSE" или "Расширения веб-службы". Они устарели и представляли собой серию расширений веб-сервисов ASMX для реализации набора протоколов WS- *. Из этого Microsoft узнала, что платформа ASMX не была достаточно расширяемой, и поэтому создала WCF (Windows Communication Foundation). Избегайте ВСЕ, как чумы.

0 голосов
/ 20 марта 2009

Вы также можете попробовать двусторонний SSL с IIS, это позволит вам удостовериться, что клиент является тем, кем они говорят, зашифровать данные по линии, а также запустить веб-службу как разные пользователи на основе сертификата, который предоставлен.

0 голосов
/ 19 марта 2009

WCF - это путь. Он предлагает множество возможных решений безопасности, некоторые основанные на стандартах и ​​совместимые, некоторые специфичные для .NET или Windows.

Быстрый поиск по «безопасности WCF» даст вам много ресурсов, но я предлагаю вам начать с этой статьи: «Основы безопасности WCF» Мишеля Леру Бустаманте.

0 голосов
/ 19 марта 2009

У меня была эта проблема на прошлой неделе, и я выбрал SOAP с SSL. Я также объединил это с ключом данных MD5 зашифрованным. Это относится, конечно, только в том случае, если вы являетесь «владельцем» как сервера, так и клиента.

...