Как защищены службы RESTful WCF, чтобы только вызывающее приложение могло их вызывать?

У меня есть приложение, которое использует Silverlight и ASP.NET в качестве внешнего интерфейса. Он извлекает данные с сервера, вызывая некоторые службы RESTful WCF, размещенные там. Я бы хотел, чтобы любопытный пользователь не открывал новое окно браузера и не вызывал веб-службу самостоятельно. Есть ли способ ограничить доступ к веб-сервисам для определенного приложения?

Спасибо!


person Kevin Babcock    schedule 15.12.2009    source источник
comment
возможно, с .NET 4 и netTcpBinding для Silverlight у вас будет больше возможностей.   -  person marc_s    schedule 16.12.2009
comment
@marc_s - netTcpBinding может помочь, но он мог бы, по крайней мере, реализовать базовую безопасность токена UserName через WS-Standards (это не встроено в Silverlight ... но есть возможная реализация).   -  person Justin Niessner    schedule 16.12.2009


Ответы (4)


Нет, нет.

person blowdart    schedule 15.12.2009
comment
Это было бы закорочено, но есть минимум 15 символов ухмылка - person blowdart; 16.12.2009
comment
Я не согласен. Для этого существует механизм, называемый аутентификацией. Как вы ограничиваете доступ к веб-приложению только для некоторой части населения Земли? Требовать авторизацию. То же самое для услуг. Службы WCF RESTful немного сложны, но способ есть. - person Slavo; 09.03.2010
comment
Я знаю, что это старый вопрос, но он периодически помечается по очевидным причинам. Короткие содержательные однострочные вкладыши не особенно полезны, было бы хорошо, если бы вы могли расширить свой ответ. Если он снова будет помечен, он может быть просто удален. Спасибо. - person Kev; 23.05.2012

Вы можете использовать HTTPS для защиты конечной точки и требовать аутентификации. Вы можете встроить в код ужасно длинный секретный ключ. К сожалению, System.Security.Cryptography отсутствует в установке SL, поэтому нет возможности шифрования на сервере/дешифрования на клиенте. И в любом случае нет причин, по которым пользователь не мог бы просто использовать что-то вроде рефлектора для чтения кода.

SL можно сделать «в основном безопасным», но точно не безопасным.

person Jarrett Meyer    schedule 15.12.2009
comment
HTTPS ничего не сделает — пользователь все еще может просматривать. Имена пользователей и пароли в Silverlight обычно выполняются с помощью проверки подлинности с помощью форм с использованием файла cookie проверки подлинности, который все еще существует при открытии другой вкладки. И, как вы говорите, ключ бесполезен, потому что отражатель обнаружит его. - person blowdart; 16.12.2009
comment
Да, в лучшем случае это только безопасность через обфускацию. HTTPS служит только для того, чтобы удерживать людей, которые абсолютно не принадлежат к конечной точке. - person Jarrett Meyer; 16.12.2009
comment
Я ценю идеи людей! - person Kevin Babcock; 16.12.2009

Если вы действительно заинтересованы в защите своих веб-служб, вам следует подумать о переходе от служб RESTful к веб-службам на основе SOAP и внедрении стандарта WS-Security для шифрования на основе сообщений.

Затем вы можете защитить свои службы, чтобы только клиенты, у которых есть надлежащая информация о безопасности (имя пользователя/пароль или сертификаты X.509), могли вызывать ваши веб-службы.

Обновить

Как видите... Я удалил X.509 как вариант. Я на мгновение отвлекся и забыл об ограничениях WS-Security в Silverlight. Хорошей новостью является то, что вы можете реализовать токены имени пользователя на основе стандарта WS-Security в Silverlight:

Реализация пароля пользователя и WS-Security с Silverlight

person Justin Niessner    schedule 15.12.2009
comment
Silverlight не поддерживает WS* - person blowdart; 16.12.2009
comment
Увидел ASP.NET... пропустил Silverlight. Тем не менее, существуют способы реализовать базовую безопасность токена имени пользователя/пароля на основе стандартов WS-* в Silverlight: ws-security-with-silverlight.aspx" rel="nofollow noreferrer">geekswithblogs.net/SunnyCoder/archive/2009/03/15/ - person Justin Niessner; 16.12.2009

Вот руководство группы Patterns & Practices для безопасности WCF. Там можно многое найти.

http://www.codeplex.com/WCFSecurityGuide

person Slavo    schedule 09.03.2010