Урок за защита на уеб услугата (WS) с пример за SOAP

Съдържание:

Anonim

Какво е WS Security?

WS Security е стандарт, който адресира сигурността при обмен на данни като част от уеб услуга.Това е ключова характеристика в SOAP, което го прави много популярен за създаване на уеб услуги.

Сигурността е важна характеристика във всяко уеб приложение. Тъй като почти всички уеб приложения са изложени на интернет, винаги има шанс за заплаха за сигурността на уеб приложенията. Следователно, когато разработвате уеб-базирани приложения, винаги се препоръчва да се гарантира, че приложението е проектирано и разработено с оглед на сигурността.

В този урок ще научите -

  • Заплахи за сигурността и противодействие
  • Стандарти за сигурност на уеб услуги
  • Как да изградим сигурни уеб услуги
  • Най-добри практики за сигурност на уеб услуги

Заплахи за сигурността и противодействие

За да разберем заплахите за сигурността, които могат да бъдат враждебни към дадено уеб приложение, нека разгледаме прост сценарий на дадено уеб приложение и да видим как работи по отношение на сигурността.

Една от мерките за сигурност, достъпна за HTTP, е протоколът HTTPS. HTTPS е сигурният начин за комуникация между клиента и сървъра през мрежата. HTTPS използва слоя Secure Sockets или 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 се управляват по 2 начина.

Първо, той дефинира специален елемент, наречен UsernameToken. Това се използва за предаване на потребителското име и паролата на уеб услугата.

Другият начин е да използвате двоичен жетон чрез BinarySecurityToken. Това се използва в ситуации, в които се използват техники за криптиране като Kerberos или X.509.

Диаграмата по-долу показва потока от това как работи моделът на защита в WS Security

По-долу са описани стъпките, които се извършват в горния работен процес

  1. Искане може да бъде изпратено от клиента на уеб услугата до Security Token Service. Тази услуга може да бъде междинна уеб услуга, която е специално създадена за предоставяне на потребителски имена / пароли или сертификати на действителната SOAP уеб услуга.
  2. След това маркерът за сигурност се предава на клиента на уеб услугата.
  3. След това клиентът на уеб услуга извика уеб услугата, но този път гарантира, че маркерът за защита е вграден в съобщението SOAP.
  4. След това уеб услугата разбира съобщението SOAP с маркера за удостоверяване и след това може да се свърже с услугата Token Security, за да провери дали маркерът за сигурност е автентичен или не.

Долният фрагмент показва формата на частта за удостоверяване, която е част от 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, който е създаден в по-ранната стъпка. Този обект ще бъде предаден на нашия Guru99Webservice, в който потребителското име и паролата могат да бъдат внимателно проучени.
  2. Атрибутът [SoapHeader] се използва сега, за да посочи, че когато се извика уеб услугата, трябва да се предадат потребителското име и паролата.
  3. В този блок код ние всъщност проверяваме потребителското име и паролата, предадени при извикване на уеб услугата. Ако потребителското име е равно на „Guru99“, а паролата е равна на „Guru99Password“, тогава съобщението на „Това е уеб услуга на Guru99“ се предава на клиента. В противен случай на клиента ще бъде изпратена грешка, ако бъде предаден грешен потребителски идентификатор и парола.

Ако кодът се изпълни успешно, след стартиране на вашия код в браузъра ще се покаже следният изход.

Изход:

Горният изход се показва при стартиране на програмата, което означава, че уеб услугата вече е налична. Нека кликнете върху връзката Описание на услугата.

От описанието на услугата вече ще можете да видите, че потребителското име и паролата са елементи на WSDL файла. Тези параметри трябва да бъдат изпратени при извикване на уеб услугата.

Най-добри практики за сигурност на уеб услуги

Следват съображения за сигурност, които трябва да се отбележат при работа с уеб услуги

  1. Одит и управление на регистрационния файл - Използвайте регистрацията на приложенията, за да регистрирате всички заявки, които идват към уеб услугите. Това дава подробен отчет за това кой се е позовал на уеб услугата и може да помогне при анализ на въздействието, ако възникне някакво нарушение на сигурността.

  2. Поток на обажданията към уеб услугата - Опитайте се да отбележите потока от разговори в уеб услугите. По подразбиране приложението може да извика множество заявки за уеб услуги с маркери за удостоверяване, предадени между тези уеб услуги. Всички разговори между уеб услугите трябва да бъдат наблюдавани и регистрирани.

  3. Чувствителна информация - Не включвайте чувствителна информация във вашите записи в дневника, като пароли или номера на кредитни карти или друг вид поверителна информация. Ако има събитие, което има някоя от тази информация, тя трябва да бъде изхвърлена преди регистриране.

  4. Проследяване на бизнес операции - Проследяване на значителни бизнес операции. Например инструментирайте приложението си, за да запишете достъп до особено чувствителни методи и бизнес логика. Да вземем пример за приложение за онлайн пазаруване. В едно типично приложение има няколко стъпки, като например избирането на артикулите, които трябва да бъдат закупени, артикулите, заредени в количката и след това окончателната покупка. Целият този бизнес процес трябва да се проследява от уеб услугата.

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

Обобщение

  • SOAP предоставя допълнителен слой, наречен WS Security, за осигуряване на допълнителна сигурност при осъществяване на обаждания до уеб услуги.
  • WS Security може да се извика с обикновено потребителско име или парола или да се използва с двоични сертификати за удостоверяване
  • Видяхме, че в .Net можем да персонализираме уеб услугата така, че потребителско име и парола да се предават като част от заглавния елемент на SOAP.