Как защитить веб-сервис в .net?

Я написал простой .NET webservice, который я буду размещать на другом сервере, может быть на другом континенте. Я действительно не знаю. Теперь у меня был только URL-адрес, и я попытался использовать метод webrequest и webresponse для доступа к этой веб-службе vai HTTP POST. Теперь я хочу знать, есть ли способ защитить доступ к веб-сервису, чтобы никто не мог его использовать?

например:

http://example.com/Verify/Verification.asmx/Verify?AccountNumber=3223&ProductName=876

Теперь это все параметры, необходимые для вызова этого веб-сервиса. Как будто теперь любой может использовать его. Итак, как я могу сделать это безопасным? Хотя, я планирую получить SSL, и все это происходит от сервера к серверу, а не от клиента к серверу?

Ответы

Ответ 1

Вы можете передать служебный ключ (как Amazon WS) в заголовке авторизации веб-запроса, который может быть зашифрован с помощью выбранного вами алгоритма, который затем дешифруется в конце обслуживания и только продолжит выполнение, если ключевые совпадения

См. раздел 14.8 в следующем URL

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Ответ 2

К сожалению, у вас не так много вариантов, поскольку вы использовали старую технологию веб-сервисов ASMX. Единственный способ аутентифицировать кого-то с веб-сервисами ASMX через Интернет, в основном, означает "сделать это самостоятельно".

Если бы мне пришлось это сделать, я бы использовал WCF и дал себе некоторые варианты. Если бы я не мог использовать WCF, я бы создал пользовательский HTTP-заголовок для передачи имени пользователя и пароля (через SSL!) И аутентификации на сервере. В качестве альтернативы, я бы использовал сертификаты на клиенте и требовал их отправки на сервер. IIS может даже превращать клиентские сертификаты в идентификаторы Windows на сервере.

Ответ 3

Как правило, для веб-служб .NET перед использованием WCF использовалась Microsoft "Расширения веб-служб" (WSE), теперь в версии 3.0. Я успешно использовал его в коммерчески доступном продукте, и он довольно хорош, так как он основан на стандартах W3C ws- *. Можно успешно взаимодействовать с тем, что из .NET-клиентов (очевидно), но также и с Java-клиентов, если вы используете Apache Axis. Загрузите по адресу:

http://www.microsoft.com/downloads/details.aspx?FamilyID=018a09fd-3a74-43c5-8ec1-8d789091255d&displaylang=en

Ответ 4

Мы выполняем множество веб-сервисов, и для их обеспечения мы просто добавили имя пользователя и пароль к нашему объекту запроса. В вашем случае вы можете просто добавить 2 новых параметра для имени пользователя и пароля или просто просто добавить его и использовать что-то вроде кода аутентификации, который вы можете сделать настолько сложным или простым, насколько хотите.

Некоторые идеи - это что-то простое, как список GUID, которые являются приемлемыми ключами доступа к шифрованию IP-адреса запрашивающих серверов, так что код аутентификации работает только с этим IP-адресом, проверенным веб-службой.

Ответ 5

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

Маркер должен быть создан при успешном входе в систему. Чтобы сгенерировать идентификатор маркера, я рекомендую использовать RNGCryptoServiceProvider.