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

Что такое безопасность WS?

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

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

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

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

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

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

При стандартном HTTPS-соединении между клиентом и сервером следующее:wing происходят шаги

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

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

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

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

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

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

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

  • Поскольку тело 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 дополнительных элемента: один — имя пользователя, а другой — пароль.

<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) Первым шагом является создание пустого Асп.Нет Веб приложение. От Visual Studio 2013, выберите пункт меню Файл->Новый проект.

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

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

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

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

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

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

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

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

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

  1. Сначала щелкните правой кнопкой мыши файл проекта, как показано ниже.

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

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

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

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

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

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

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

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

	}
}

Объяснение кода: -

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

Шаг 5) В качестве следующего шага следуетwing код необходимо добавить туда же Файл 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";
	}

Объяснение кода: -

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

Если код выполнен успешно, тоwing Вывод будет показан, когда вы запустите свой код в браузере.

Вывод:

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

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

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

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

Рекомендации по обеспечению безопасности веб-сервисов

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

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

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

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

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

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

Итоги

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