Что такое WS Security?
WS Security — это стандарт, который решает вопросы безопасности при обмене данными в рамках веб-службы. Это ключевая функция SOAP, которая делает его очень популярным для создания веб-служб.
Безопасность — важная функция в любом веб-приложении. Поскольку почти все веб-приложения открыты для Интернета, всегда существует вероятность угрозы безопасности веб-приложений. Следовательно, при разработке веб-приложений всегда рекомендуется убедиться, что приложение разработано и разработано с учетом требований безопасности.
В этом уроке вы узнаете
- Угрозы безопасности и контрмеры
- Стандарты безопасности веб-сервисов
- Как создавать безопасные веб-сервисы
- Рекомендации по безопасности веб-служб
Угрозы безопасности и контрмеры
Чтобы понять угрозы безопасности, которые могут быть враждебны веб-приложению, давайте рассмотрим простой сценарий веб-приложения и посмотрим, как оно работает с точки зрения безопасности.
Одной из мер безопасности, доступных для HTTP, является протокол HTTPS. HTTPS — это безопасный способ связи между клиентом и сервером через Интернет. HTTPS использует уровень защищенных сокетов или SSL для безопасной связи. И клиент, и сервер будут иметь цифровой сертификат, чтобы идентифицировать себя как подлинный, когда происходит какая-либо связь между клиентом и сервером.
При стандартной связи HTTPS между клиентом и сервером выполняются следующие шаги
- Клиент отправляет запрос на сервер через сертификат клиента. Когда сервер видит сертификат клиента, он делает запись в своей системе кэширования, чтобы он знал, что ответ должен возвращаться только этому клиенту.
- Затем сервер аутентифицирует себя клиенту, отправляя свой сертификат. Это гарантирует, что клиент общается с нужным сервером.
- После этого вся связь между клиентом и сервером шифруется. Это гарантирует, что если другие пользователи попытаются нарушить безопасность и получить необходимые данные, они не смогут прочитать их, поскольку они будут зашифрованы.
Но вышеупомянутый тип безопасности не будет работать во всех ситуациях. Может наступить момент, когда клиент может общаться с несколькими серверами. Пример, приведенный ниже, показывает, что клиент одновременно обращается к базе данных и веб-серверу. В таких случаях не вся информация может проходить через протокол https.
Здесь SOAP вступает в действие, чтобы преодолеть такие препятствия, имея спецификацию WS Security. В этой спецификации все данные, связанные с безопасностью, определены в элементе заголовка SOAP.
Элемент заголовка может содержать нижеприведенную информацию
- Если сообщение в теле SOAP было подписано каким-либо ключом безопасности, этот ключ можно определить в элементе заголовка.
- Если какой-либо элемент в теле SOAP зашифрован, заголовок будет содержать необходимые ключи шифрования, чтобы можно было расшифровать сообщение, когда оно достигнет пункта назначения.
В средах с несколькими серверами вышеуказанная техника аутентификации SOAP помогает следующим образом.
- Поскольку тело SOAP зашифровано, его сможет расшифровать только тот веб-сервер, на котором размещена веб-служба. Это из-за того, как разработан протокол SOAP.
- Предположим, что если сообщение передается на сервер базы данных в виде HTTP-запроса, его невозможно расшифровать, поскольку в базе данных нет подходящих механизмов для этого.
- Только когда запрос действительно достигает веб-сервера в виде протокола SOAP, он сможет расшифровать сообщение и отправить соответствующий ответ клиенту.
В последующих темах мы увидим, как стандарт безопасности WS можно использовать для SOAP.
Стандарты безопасности веб-сервисов
Как обсуждалось в предыдущем разделе, стандарт WS-Security вращается вокруг включения определения безопасности в заголовок SOAP.
Учетные данные в заголовке SOAP управляются двумя способами.
Во-первых, он определяет специальный элемент с именем UsernameToken. Это используется для передачи имени пользователя и пароля в веб-сервис.
Другой способ — использовать двоичный токен через BinarySecurityToken. Это используется в ситуациях, когда используются методы шифрования, такие как Kerberos или X.509.
На диаграмме ниже показано, как работает модель безопасности в WS Security.
Ниже приведены шаги, которые происходят в вышеуказанном рабочем процессе.
- Запрос может быть отправлен от клиента веб-службы в службу маркеров безопасности. Этот сервис может быть промежуточным веб-сервисом, который специально создан для предоставления имен пользователей / паролей или сертификатов для реального веб-сервиса SOAP.
- Затем токен безопасности передается клиенту веб-службы.
- Затем клиент веб-службы вызывает веб-службу, но на этот раз гарантирует, что токен безопасности встроен в сообщение SOAP.
- Затем веб-служба распознает сообщение SOAP с токеном аутентификации и затем может связаться со службой токенов безопасности, чтобы узнать, является ли токен безопасности аутентичным или нет.
Приведенный ниже фрагмент кода показывает формат части аутентификации, которая является частью документа WSDL. Теперь, основываясь на приведенном ниже фрагменте, сообщение SOAP будет содержать 2 дополнительных элемента, один из которых будет именем пользователя, а другой — паролем.
<xs:element name="UsernameToken"> <xs:complexType> <xs:sequence> <xs:element ref="Username"/> <xs:element ref="Password" minOccurs="0"/> </xs:sequence> <xs:attribute name="Id" type="xs:ID"/> </xs:complexType></xs:element>
Когда сообщение SOAP фактически передается между клиентами и сервером, часть сообщения, содержащая учетные данные пользователя, может выглядеть так, как показано выше. Имя элемента wsse — это специальный элемент с именем, определенным для SOAP, и означает, что он содержит информацию, основанную на безопасности.
Как создавать безопасные веб-сервисы
Теперь давайте посмотрим на пример безопасности веб-службы SOAP. Мы построим безопасность веб-службы на примере, продемонстрированном ранее в главе SOAP, и добавим к нему уровень безопасности.
В нашем примере мы собираемся создать простой веб-сервис, который будет использоваться для возврата строки в приложение, которое вызывает веб-сервис. Но на этот раз, когда вызывается веб-служба, учетные данные необходимо предоставить вызывающей службе. Давайте создадим наш веб-сервис SOAP и добавим к нему определение безопасности.
Шаг 1) Первый шаг — создать пустое веб-приложение Asp.Net . В Visual Studio 2013 щелкните пункт меню Файл-> Новый проект.
После того, как вы нажмете на опцию «Новый проект», Visual Studio предоставит вам другое диалоговое окно для выбора типа проекта и предоставления необходимых деталей проекта. Это объясняется в следующем шаге
Шаг 2) На этом этапе
- Убедитесь, что вы сначала выбрали веб-шаблон C # для веб-приложения ASP.NET. Проект должен быть такого типа, чтобы создать проект веб-сервисов. Выбрав этот параметр, Visual Studio затем выполнит необходимые шаги для добавления необходимых файлов, которые требуются для любого веб-приложения.
- Дайте имя вашему проекту, которое в нашем случае было названо « webservice.asmx». Затем обязательно укажите место, где будут храниться файлы проекта.
После этого вы увидите файл проекта, созданный в обозревателе решений в Visual Studio 2013.
Шаг 3) На этом этапе
Мы собираемся добавить файл веб-службы в наш проект
- Сначала щелкните правой кнопкой мыши файл проекта, как показано ниже
- После того, как вы щелкнете правой кнопкой мыши по файлу проекта, у вас будет возможность выбрать опцию «Добавить-> Веб-служба (ASMX)» для добавления файла веб-службы. Просто укажите имя Tutorial Service для файла имени веб-службы.
Вышеуказанный шаг вызовет диалоговое окно, в котором можно ввести имя файла веб-службы. Поэтому в приведенном ниже диалоговом окне введите имя TutorialService в качестве имени файла.
Шаг 4) Добавьте следующий код в файл asmx Tutorial Service. Приведенный ниже фрагмент кода используется для добавления пользовательского класса, который будет использоваться для изменения заголовка SOAP при создании сообщения SOAP. Поскольку теперь мы хотим добавить учетные данные безопасности в заголовок SOAP, этот шаг является обязательным.
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Объяснение кода: —
- Сейчас мы создаем отдельный класс с именем AuthHeader, который имеет тип класса SoapHeader . Всякий раз, когда вы хотите изменить то, что передается в заголовке SOAP, необходимо создать класс, который использует встроенный класс SoapHeader .Net. Настраивая SOAPheader, мы теперь можем передавать «Имя пользователя» и «Пароль» при вызове веб-службы.
- Затем мы определяем переменные ‘UserName’ и ‘Password’, которые имеют тип string. Они будут использоваться для хранения значений имени пользователя и пароля, которые передаются веб-службе.
Шаг 5) В качестве следующего шага следующий код необходимо добавить в тот же файл TutorialService.asmx . Этот код фактически определяет функцию нашего веб-сервиса. Эта функция возвращает клиенту строку «Это веб-служба Guru99». Но на этот раз строка будет возвращена, только если клиентское приложение передаст учетные данные веб-службе.
public class TutorialService : System.Web.Services.WebService { public AuthHeader Credentials; [SoapHeader("Credentials")] [WebMethod] public string Guru99WebService() { if (Credentials.UserName.ToLower() != "Guru99" || Credentials.Password.ToLower() != "Guru99Password") { throw new SoapException("Unauthorized", SoapException.ClientFaultCode); } eise return "This is a Guru99 Web service"; }
Объяснение кода: —
- Здесь мы создаем объект класса AuthHeader, который был создан на предыдущем шаге. Этот объект будет передан нашему Guru99Webservice, в котором имя пользователя и пароль могут быть тщательно изучены.
- Атрибут [SoapHeader] теперь используется для указания того, что при вызове веб-службы необходимо передать имя пользователя и пароль.
- В этом блоке кода мы на самом деле изучаем имя пользователя и пароль, переданные при вызове веб-службы. Если имя пользователя равно «Guru99», а пароль — «Guru99Password», то сообщение «Это веб-служба Guru99» передается клиенту. В противном случае клиенту будет отправлено сообщение об ошибке, если передан неправильный идентификатор пользователя и пароль.
Если код выполнен успешно, при запуске кода в браузере будет показан следующий вывод.
Вывод:
Приведенный выше вывод отображается при запуске программы, что означает, что веб-сервис теперь доступен. Давайте перейдем по ссылке Описание услуги.
Из описания службы вы сможете увидеть, что имя пользователя и пароль являются элементами файла WSDL. Эти параметры необходимо отправить при вызове веб-службы.
Рекомендации по безопасности веб-служб
Ниже приведены соображения безопасности, которые следует учитывать при работе с веб-службами.
-
Аудит и управление журналами. Используйте ведение журнала приложений для регистрации всех запросов, поступающих к веб-службам. Это дает подробный отчет о том, кто вызвал веб-службу, и может помочь в анализе воздействия в случае любого нарушения безопасности.
-
Поток вызовов в веб-сервисе — попробуйте отметить поток вызовов в веб-сервисах. По умолчанию приложение может вызывать несколько запросов веб-служб с токенами аутентификации, передаваемыми между этими веб-службами. Все вызовы между веб-сервисами должны контролироваться и регистрироваться.
-
Конфиденциальная информация — не включайте конфиденциальную информацию в свои записи журнала, такие как пароли или номера кредитных карт или любую другую конфиденциальную информацию. Если есть событие, которое имеет какую-либо из этой информации, его необходимо сбросить перед регистрацией.
-
Отслеживание бизнес-операций — Отслеживание важных бизнес-операций. Например, инструмент вашего приложения для записи доступа к особо чувствительным методам и бизнес-логике. Давайте рассмотрим пример приложения для онлайн-покупок. В типичном приложении есть несколько этапов, таких как выбор товаров, которые будут приобретены, товары, загруженные в корзину, и окончательная покупка. Весь этот рабочий процесс должен отслеживаться веб-сервисом.
-
Proper Authentication — Authentication is the mechanism by which the clients can establish their identity with the web service using a certain set of credentials that can prove that identity. One should never store the user credentials, and hence, if WS Security is used to call the web service, it has to be noted that the web service should not store the credentials which are sent in the SOAP header. These should be discarded by the web service.
Summary
- SOAP provides an additional layer called WS Security for providing additional security when calls are made to Web services.
- The WS Security can be called with a simple username or password or can be used with Binary certificates for authentication
- We have seen that in .Net we can customize the Web service to have a user name and password passed as part of the SOAP header element.