Підручник із безпеки веб-служби (WS) із прикладом SOAP

Зміст:

Anonim

Що таке WS Security?

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

Безпека є важливою функцією будь-якої веб-програми. Оскільки майже всі веб-програми піддаються дії Інтернету, завжди існує ймовірність загрози безпеці веб-додатків. Отже, при розробці веб-програм завжди рекомендується забезпечити розробку та розробку додатків з урахуванням безпеки.

У цьому підручнику ви дізнаєтесь-

  • Загрози безпеці та контрзаходи
  • Стандарти безпеки веб-сервісу
  • Як створити безпечні веб-сервіси
  • Найкращі практики безпеки веб-служб

Загрози безпеці та контрзаходи

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

Одним із заходів безпеки, доступних для HTTP, є протокол HTTPS. HTTPS - це безпечний спосіб зв'язку між клієнтом та сервером через Інтернет. HTTPS використовує рівень захищених сокетів або SSL для безпечного зв'язку. І клієнт, і сервер матимуть цифровий сертифікат, щоб визнати себе справжнім, коли між клієнтом і сервером відбувається будь-яке спілкування.

У стандартному зв'язку HTTPS між клієнтом і сервером виконуються наступні кроки

  1. Клієнт надсилає запит на сервер через сертифікат клієнта. Коли сервер бачить сертифікат клієнта, він робить примітку в своїй кеш-системі, щоб знати, що відповідь повинна повертатися лише до цього клієнта.
  2. Потім сервер автентифікується перед клієнтом, надіславши його сертифікат. Це гарантує, що клієнт спілкується з правильним сервером.
  3. Усі подальші зв’язки між клієнтом та сервером шифруються. Це гарантує, що якщо будь-які інші користувачі спробують зламати безпеку та отримати необхідні дані, вони не зможуть їх прочитати, оскільки вони будуть зашифровані.

Але вищезазначений тип захисту не буде працювати у всіх ситуаціях. Може настати момент, коли клієнт може спілкуватися з кількома серверами. Наведений нижче приклад показує, як клієнт одночасно спілкується як з базою даних, так і з веб-сервером. У таких випадках не вся інформація може проходити через протокол https.

Саме тут SOAP вступає в дію, щоб подолати такі перешкоди, встановивши специфікацію безпеки WS. За допомогою цієї специфікації всі дані, пов’язані з безпекою, визначаються в елементі заголовка 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 Tutorial Service. Наведений нижче фрагмент коду використовується для додавання власного класу, який буде використовуватися для зміни заголовка SOAP, коли генерується повідомлення SOAP. Оскільки ми тепер хочемо додати облікові дані безпеки до заголовка SOAP, цей крок є обов’язковим.

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

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

  1. Зараз ми створюємо окремий клас під назвою AuthHeader, який має тип SoapHeader . Кожного разу, коли ви хочете змінити те, що передається в заголовку SOAP, потрібно створити клас, який використовує вбудований клас SoapHeader .Net. Налаштовуючи SOAPheader, ми тепер маємо можливість передавати "Ім'я користувача" та "Пароль" під час виклику веб-служби.
  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, який був створений на попередньому кроці. Цей об’єкт буде передано нашому веб-сервісу Guru99, в якому можна буде ретельно вивчити ім’я користувача та пароль.
  2. Атрибут [SoapHeader] використовується зараз, щоб вказати, що під час виклику веб-служби йому потрібно передавати ім’я користувача та пароль.
  3. У цьому блоці коду ми фактично перевіряємо ім’я користувача та пароль, передані під час виклику веб-служби. Якщо Ім'я користувача дорівнює "Guru99", а пароль дорівнює "Guru99Password", тоді повідомлення "Це веб-служба Guru99" передається клієнту. В іншому випадку клієнту буде надіслано помилку, якщо передано неправильний ідентифікатор користувача та пароль.

Якщо код виконано успішно, під час запуску коду в браузері буде показано наступний результат.

Вихід:

Наведений вище результат відображається під час запуску програми, а це означає, що веб-служба тепер доступна. Клацніть на посилання Опис послуги.

З опису послуги тепер ви зможете побачити, що ім’я користувача та пароль є елементами файлу WSDL. Ці параметри потрібно надсилати при виклику веб-служби.

Найкращі практики безпеки веб-служб

Далі наводяться міркування щодо безпеки, на які слід звернути увагу при роботі з веб-службами

  1. Аудит та управління журналами - Використовуйте журнал програм, щоб реєструвати всі запити, які надходять до веб-служб. Це дає детальний звіт про те, хто викликав веб-службу, і може допомогти в аналізі впливу, якщо трапиться будь-яке порушення безпеки.

  2. Потік дзвінків до веб-служби - Спробуйте відзначити потік дзвінків у веб-службах. За замовчуванням програма може викликати кілька запитів веб-служб із маркерами автентифікації, переданими між цими веб-службами. Усі дзвінки між веб-службами повинні контролюватися та реєструватися.

  3. Конфіденційна інформація - не включайте конфіденційну інформацію у свої записи журналу, наприклад паролі, номери кредитних карток або будь-яку іншу конфіденційну інформацію. Якщо є подія, яка має будь-яку з цієї інформації, її потрібно відкинути перед реєстрацією.

  4. Відстежувати ділові операції - відстежувати значні ділові операції. Наприклад, інструментуйте свою програму для запису доступу до особливо чутливих методів та ділової логіки. Візьмемо приклад додатку для покупок в Інтернеті. У типовій програмі є кілька етапів, таких як вибір товарів, які потрібно придбати, товарів, завантажених у кошик, а потім остаточна покупка. Весь цей бізнес-процес повинен відстежуватися веб-службою.

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

Резюме

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