Учебное пособие по безопасности веб-службы (WS) с примером SOAP

Содержание:

Anonim

Что такое WS Security?

WS Security - это стандарт, обеспечивающий безопасность при обмене данными в рамках веб-службы. Это ключевая функция SOAP, которая делает его очень популярным для создания веб-служб.

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

В этом руководстве вы узнаете:

  • Угрозы безопасности и меры противодействия
  • Стандарты безопасности веб-сервисов
  • Как создавать безопасные веб-сервисы
  • Лучшие практики безопасности веб-сервисов

Угрозы безопасности и меры противодействия

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

Одной из мер безопасности, доступных для HTTP, является протокол HTTPS. HTTPS - это безопасный способ связи между клиентом и сервером через Интернет. HTTPS использует уровень защищенных сокетов или SSL для безопасной связи. И клиент, и сервер будут иметь цифровой сертификат, чтобы идентифицировать себя как подлинный при любом обмене данными между клиентом и сервером.

При стандартном обмене данными HTTPS между клиентом и сервером выполняются следующие шаги.

  1. Клиент отправляет запрос на сервер через сертификат клиента. Когда сервер видит сертификат клиента, он делает отметку в своей системе кэширования, чтобы знать, что ответ должен возвращаться только этому клиенту.
  2. Затем сервер аутентифицируется клиенту, отправляя свой сертификат. Это гарантирует, что клиент взаимодействует с правильным сервером.
  3. После этого вся связь между клиентом и сервером зашифрована. Это гарантирует, что если другие пользователи попытаются взломать систему безопасности и получить требуемые данные, они не смогут их прочитать, потому что они будут зашифрованы.

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

Именно здесь вступает в действие протокол SOAP для преодоления таких препятствий за счет наличия спецификации WS Security. В этой спецификации все данные, связанные с безопасностью, определены в элементе заголовка SOAP.

Элемент заголовка может содержать указанную ниже информацию.

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

В средах с несколькими серверами описанный выше метод аутентификации SOAP помогает следующим образом.

  • Поскольку тело SOAP зашифровано, его сможет расшифровать только веб-сервер, на котором размещена веб-служба. Это связано с тем, как разработан протокол SOAP.
  • Предположим, что если сообщение передается на сервер базы данных в HTTP-запросе, его нельзя расшифровать, потому что база данных не имеет правильных механизмов для этого.
  • Только когда запрос действительно достигнет веб-сервера как протокол SOAP, он сможет расшифровать сообщение и отправить соответствующий ответ обратно клиенту.

В следующих разделах мы увидим, как стандарт WS Security можно использовать для SOAP.

Стандарты безопасности веб-сервисов

Как обсуждалось в предыдущем разделе, стандарт WS-Security вращается вокруг включения определения безопасности в заголовок SOAP.

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

Во-первых, он определяет специальный элемент под названием UsernameToken. Он используется для передачи имени пользователя и пароля веб-службе.

Другой способ - использовать двоичный токен через BinarySecurityToken. Это используется в ситуациях, когда используются такие методы шифрования, как Kerberos или X.509.

На схеме ниже показано, как модель безопасности работает в WS Security.

Ниже приведены шаги, которые выполняются в указанном выше рабочем процессе.

  1. Запрос может быть отправлен от клиента веб-службы в службу маркеров безопасности. Эта служба может быть промежуточной веб-службой, специально созданной для предоставления имен пользователей / паролей или сертификатов фактической веб-службе SOAP.
  2. Затем маркер безопасности передается клиенту веб-службы.
  3. Затем клиент веб-службы вызвал веб-службу, но на этот раз убедившись, что маркер безопасности встроен в сообщение SOAP.
  4. Затем веб-служба распознает сообщение SOAP с токеном аутентификации и может затем связаться со службой токенов безопасности, чтобы узнать, является ли токен безопасности подлинным или нет.

В приведенном ниже фрагменте показан формат части аутентификации, которая является частью документа WSDL. Теперь, исходя из приведенного ниже фрагмента, сообщение SOAP будет содержать 2 дополнительных элемента, один из которых является именем пользователя, а другой - паролем.

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

Как создавать безопасные веб-сервисы

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

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

Шаг 1) Первый шаг - создать пустое веб-приложение Asp.Net. В Visual Studio 2013 выберите пункт меню Файл-> Новый проект.

После того, как вы нажмете на опцию «Новый проект», Visual Studio предоставит вам другое диалоговое окно для выбора типа проекта и предоставления необходимых сведений о проекте. Это объясняется на следующем шаге.

Шаг 2) На этом шаге

  1. Убедитесь, что вы сначала выбрали веб-шаблон C # для веб-приложения ASP.NET. Чтобы создать проект веб-сервисов, проект должен быть этого типа. Выбрав этот вариант, Visual Studio выполнит необходимые шаги для добавления необходимых файлов, которые требуются любому веб-приложению.
  2. Дайте вашему проекту имя, которое в нашем случае было задано как « webservice.asmx». Затем обязательно укажите место, где будут храниться файлы проекта.

После этого вы увидите файл проекта, созданный в обозревателе решений в Visual Studio 2013.

Шаг 3) На этом шаге

Мы собираемся добавить файл веб-сервиса в наш проект.

  1. Сначала щелкните правой кнопкой мыши файл проекта, как показано ниже.
  1. После того, как вы щелкните правой кнопкой мыши файл проекта, у вас будет возможность выбрать опцию «Добавить-> Веб-служба (ASMX), чтобы добавить файл веб-службы. Просто укажите имя учебной службы для файла имени веб-службы».

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

Шаг 4) Добавьте следующий код в asmx-файл учебной службы. Приведенный ниже фрагмент кода используется для добавления настраиваемого класса, который будет использоваться для изменения заголовка SOAP при создании сообщения SOAP. Поскольку теперь мы хотим добавить учетные данные безопасности в заголовок SOAP, этот шаг является обязательным.

return "This is a Guru99 Web Service";}public class AuthHeader : SoapHeader{public string UserName;public string Password;}}

Пояснение к коду: -

  1. Сейчас мы создаем отдельный класс AuthHeader типа SoapHeader class . Всякий раз, когда вы хотите изменить то, что передается в заголовке SOAP, необходимо создать класс, который использует встроенный класс SoapHeader для .Net. Настроив заголовок SOAP, мы теперь можем передавать «Имя пользователя» и «Пароль» при вызове веб-службы.
  2. Затем мы определяем переменные UserName и Password, которые имеют строковый тип. Они будут использоваться для хранения значений имени пользователя и пароля, которые передаются веб-службе.

Шаг 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);}eisereturn "This is a Guru99 Web service";}

Пояснение к коду: -

  1. Здесь мы создаем объект класса AuthHeader, который был создан на предыдущем шаге. Этот объект будет передан в наш Guru99Webservice, в котором можно будет внимательно изучить имя пользователя и пароль.
  2. Атрибут [SoapHeader] теперь используется, чтобы указать, что при вызове веб-службы ей необходимо передать имя пользователя и пароль.
  3. В этом блоке кода мы фактически проверяем имя пользователя и пароль, переданные при вызове веб-службы. Если имя пользователя равно «Guru99», а пароль равен «Guru99Password», то клиенту передается сообщение «Это веб-сервис Guru99». В противном случае клиенту будет отправлена ​​ошибка, если будут переданы неправильный идентификатор пользователя и пароль.

Если код выполнен успешно, при запуске кода в браузере будет показан следующий результат.

Выход:

Приведенный выше вывод отображается при запуске программы, что означает, что веб-служба теперь доступна. Щелкните ссылку «Описание услуги».

Из описания службы вы теперь можете увидеть, что имя пользователя и пароль являются элементами файла WSDL. Эти параметры необходимо отправить при вызове веб-службы.

Лучшие практики безопасности веб-сервисов

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

  1. Аудит и управление журналами - используйте ведение журнала приложений для регистрации всех запросов, поступающих к веб-службам. Это дает подробный отчет о том, кто вызвал веб-службу, и может помочь в анализе воздействия, если произойдет какое-либо нарушение безопасности.

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

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

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

  5. Правильная аутентификация - аутентификация - это механизм, с помощью которого клиенты могут установить свою личность с веб-службой, используя определенный набор учетных данных, которые могут подтвердить эту личность. Никогда не следует хранить учетные данные пользователя, и, следовательно, если WS Security используется для вызова веб-службы, необходимо отметить, что веб-служба не должна хранить учетные данные, которые отправляются в заголовке SOAP. Они должны быть удалены веб-службой.

Резюме

  • SOAP предоставляет дополнительный уровень, называемый WS Security, для обеспечения дополнительной безопасности при обращении к веб-службам.
  • WS Security может быть вызван с помощью простого имени пользователя или пароля или может использоваться с двоичными сертификатами для аутентификации.
  • Мы видели, что в .Net мы можем настроить веб-службу так, чтобы имя пользователя и пароль передавались как часть элемента заголовка SOAP.