Підручник з безпеки веб-служб (WS) із прикладом SOAP
Що таке WS Security?
WS Security — це стандарт, який забезпечує безпеку під час обміну даними в рамках веб-служби. Це ключова функція SOAP, яка робить її дуже популярною для створення веб-служб.
Безпека є важливою характеристикою будь-якої веб-програми. Оскільки майже всі веб-програми піддаються доступу до Інтернету, завжди існує ймовірність загрози безпеці веб-програм. Отже, під час розробки веб-додатків завжди рекомендується переконатися, що додаток розроблено та розроблено з урахуванням безпеки.
Загрози безпеці та протидія
Щоб зрозуміти загрози безпеці, які можуть бути ворожими для веб-програми, давайте розглянемо простий сценарій веб-програми та побачимо, як вона працює з точки зору безпеки.
Одним із заходів безпеки, доступних для HTTP, є протокол HTTPS. HTTPS — це безпечний спосіб зв’язку між клієнтом і сервером через Інтернет. HTTPS використовує рівень захищених сокетів або SSL для безпечного зв’язку. І клієнт, і сервер матимуть цифровий сертифікат, щоб ідентифікувати себе як справжні під час будь-якого зв’язку між клієнтом і сервером.
У стандартному зв’язку HTTPS між клієнтом і сервером виконуються наступні кроки
- Клієнт надсилає запит на сервер через сертифікат клієнта. Коли сервер бачить сертифікат клієнта, він робить примітку у своїй кеш-системі, щоб він знав, що відповідь має повернутися лише до цього клієнта.
- Потім сервер автентифікує себе клієнту, надсилаючи свій сертифікат. Це гарантує, що клієнт спілкується з потрібним сервером.
- Після цього весь зв’язок між клієнтом і сервером шифрується. Це гарантує, що якщо будь-які інші користувачі спробують зламати захист і отримати необхідні дані, вони не зможуть їх прочитати, оскільки вони будуть зашифровані.
Але наведений вище тип безпеки не працюватиме у всіх ситуаціях. Може настати час, коли клієнт зможе спілкуватися з кількома серверами. У наведеному нижче прикладі показано, як клієнт одночасно спілкується з базою даних і веб-сервером. У таких випадках не вся інформація може проходити через протокол https.
Саме тут SOAP вступає в дію, щоб подолати такі перешкоди завдяки наявності специфікації WS Security. За цією специфікацією всі пов’язані з безпекою дані визначаються в елементі заголовка SOAP.
Елемент заголовка може містити наведену нижче інформацію
- Якщо повідомлення в тілі SOAP було підписано будь-яким ключем безпеки, цей ключ можна визначити в елементі заголовка.
- Якщо будь-який елемент у тілі SOAP зашифровано, заголовок міститиме необхідні ключі шифрування, щоб повідомлення можна було розшифрувати, коли воно досягне пункту призначення.
У середовищах із кількома серверами наведена вище техніка аутентифікації SOAP допомагає таким чином.
- Оскільки тіло SOAP зашифровано, його зможе розшифрувати лише веб-сервер, на якому розміщено веб-сервіс. Це пояснюється тим, як розроблено протокол SOAP.
- Припустімо, якщо повідомлення передається на сервер бази даних у HTTP-запиті, його неможливо розшифрувати, оскільки база даних не має відповідних механізмів для цього.
- Лише тоді, коли запит дійсно досягне веб-сервера як протокол SOAP, він зможе розшифрувати повідомлення та надіслати відповідну відповідь назад клієнту.
У наступних темах ми побачимо, як можна використовувати стандарт WS Security 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), щоб додати файл веб-служби. Просто вкажіть назву служби навчання для файлу назви веб-служби.
Наведений вище крок підкаже діалогове вікно, у якому можна ввести назву файлу веб-служби. Отже, у діалоговому вікні нижче введіть ім’я 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, ми тепер маємо можливість передавати «Ім’я користувача» та «Пароль» під час виклику веб-служби.
- Потім ми визначаємо змінні «Ім’я користувача» та «Пароль», які мають тип 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, який було створено на попередньому кроці. Цей об'єкт буде передано нашому Веб-сервіс Guru99 в якому можна уважно вивчити ім’я користувача та пароль.
- Атрибут [SoapHeader] тепер використовується, щоб вказати, що під час виклику веб-служби потрібно передати ім’я користувача та пароль.
- У цьому блоці коду ми фактично перевіряємо ім’я користувача та пароль, передані під час виклику веб-служби. Якщо ім’я користувача дорівнює «Guru99», а пароль дорівнює «Guru99Password», тоді клієнту передається повідомлення «Це веб-служба Guru99». Інакше клієнту буде надіслано повідомлення про помилку, якщо буде передано неправильний ідентифікатор користувача та пароль.
Якщо код виконано успішно, під час запуску коду в браузері буде показано наступний результат.
вихід:
Наведений вище результат відображається під час запуску програми, що означає, що веб-служба тепер доступна. Давайте натиснемо «Сервіс». Descriptіонна ланка.
З опису служби тепер ви зможете побачити, що ім’я користувача та пароль є елементами WSDL файл. Ці параметри потрібно надіслати під час виклику веб-служби.
Найкращі методи безпеки веб-служб
Нижче наведено міркування безпеки, які слід враховувати під час роботи з веб-службами
1. Аудит і керування журналами – Використовуйте реєстрацію додатків для реєстрації всіх запитів, які надходять до веб-служб. Це дає детальний звіт про те, хто викликав веб-службу, і може допомогти в аналізі впливу, якщо станеться будь-яке порушення безпеки.
2. Потік дзвінків на веб-сервіс – Спробуйте відзначити потік дзвінків у веб-сервісах. За замовчуванням програма може викликати кілька запитів веб-служб із маркерами автентифікації, що передаються між цими веб-службами. Усі дзвінки між веб-службами потрібно відстежувати та реєструвати.
3. Конфіденційна інформація – Не включайте конфіденційну інформацію до записів журналу, таку як паролі чи номери кредитних карток, або будь-яку іншу конфіденційну інформацію. Якщо є подія, яка містить будь-яку з цієї інформації, її потрібно відкинути перед реєстрацією.
4. Трек бізнес Operaвих – Відстежуйте важливі бізнес-операції. Наприклад, інструментуйте свою програму для запису доступу до особливо чутливих методів і бізнес-логіки. Розглянемо приклад програми онлайн-покупок. У типовій програмі є кілька етапів, наприклад вибір товарів для придбання, завантаження товарів у кошик і остаточна покупка. Веб-служба має відслідковувати весь бізнес-процес.
5. Належна автентифікація – Автентифікація – це механізм, за допомогою якого клієнти можуть ідентифікувати свою особу з веб-службою, використовуючи певний набір облікових даних, які можуть підтвердити цю особу. Ніколи не слід зберігати облікові дані користувача, і, отже, якщо WS Security використовується для виклику веб-служби, слід зазначити, що веб-служба не повинна зберігати облікові дані, які надсилаються в заголовку SOAP. Веб-служба має їх усунути.
Підсумки
- SOAP надає додатковий рівень під назвою WS Security для забезпечення додаткової безпеки під час звернення до веб-служб.
- WS Security можна викликати за допомогою простого імені користувача чи пароля або можна використовувати двійкові сертифікати для автентифікації
- Ми бачили це в .Net ми можемо налаштувати веб-службу, щоб ім’я користувача та пароль передавалися як частина елемента заголовка SOAP.