Пример за сигурност на уеб услуги (WS) с SOAP
⚡ Умно обобщение
Защитата на уеб услугите (WS) е стандарт, който защитава данните, обменяни по време на извикване на SOAP уеб услуга. Този ресурс обяснява заплахите за сигурността и мерките за противодействие, стандартите за WS-Security, изграждането на защитена уеб услуга с идентификационни данни и най-добрите практики за сигурност на уеб услугите.
Какво е WS Security?
WS Security е стандарт, който се отнася до сигурността, когато данни се обменят като част от уеб услуга. Това е ключова характеристика в SOAP, която го прави много популярен за създаване на уеб услуги.
Сигурността е важна характеристика във всяко уеб приложение. Тъй като почти всички уеб приложения са изложени на интернет, винаги има вероятност от заплаха за сигурността на уеб приложенията. Следователно, когато се разработватping При уеб-базирани приложения винаги се препоръчва да се гарантира, че приложението е проектирано и разработено с оглед на сигурността.
Заплахи за сигурността и противодействие
За да разберем заплахите за сигурността, които могат да бъдат враждебни към уеб приложение, нека разгледаме един прост сценарий на уеб приложение и да видим как работи то от гледна точка на сигурността.
Една от мерките за сигурност, налични за HTTP, е протоколът HTTPS. HTTPS е сигурният начин за комуникация между клиента и сървъра през мрежата. HTTPS използва Secure Sockets Layer или SSL за сигурна комуникация. Както клиентът, така и сървърът ще имат цифров сертификат, за да се идентифицират като автентични, когато се осъществи комуникация между клиента и сървъра.
При стандартна HTTPS комуникация между клиента и сървъра се извършват следните стъпки:
- Клиентът изпраща заявка до сървъра чрез клиентския сертификат. Когато сървърът види клиентския сертификат, той прави бележка в своята кеш система, така че да знае, че отговорът трябва да се върне само към този клиент.
- След това сървърът се удостоверява на клиента, като изпраща своя сертификат. Това гарантира, че клиентът комуникира с правилния сървър.
- Цялата комуникация след това между клиента и сървъра е криптирана. Това гарантира, че ако други потребители се опитат да пробият сигурността и да получат необходимите данни, те няма да могат да ги прочетат, защото те ще бъдат криптирани.
Но горният тип защита няма да работи във всички ситуации. Може да дойде момент, в който клиентът може да комуникира с множество сървъри. Пример, даден по-долу, показва клиент, който комуникира едновременно с база данни и уеб сървър. В такива случаи не цялата информация може да премине през HTTPS протокола.
Тук SOAP влиза в действие, за да преодолее подобни препятствия, като използва спецификацията WS Security. С тази спецификация всички данни, свързани със сигурността, са дефинирани в заглавния елемент на SOAP. Заглавният елемент може да съдържа следната информация:
- Ако съобщението в тялото на SOAP е подписано с който и да е защитен ключ, този ключ може да бъде дефиниран в заглавния елемент.
- Ако някой елемент в тялото на SOAP е криптиран, заглавката ще съдържа необходимите ключове за криптиране, така че съобщението да може да бъде декриптирано, когато достигне местоназначението.
В среда с множество сървъри, горната техника за SOAP удостоверяване помага по следния начин:
- Тъй като тялото на SOAP е криптирано, то ще може да бъде декриптирано само от уеб сървъра, който хоства уеб услугата. Това се дължи на начина, по който е проектиран SOAP протоколът.
- Да предположим, че съобщението се предава на сървъра на базата данни чрез HTTP заявка; то не може да бъде декриптирано, защото базата данни няма правилните механизми за това.
- Едва когато заявката действително достигне до уеб сървъра като SOAP протокол, той ще може да дешифрира съобщението и да изпрати съответния отговор обратно на клиента.
В следващите теми ще видим как може да се използва стандартът WS Security за SOAP.
Стандарти за сигурност на уеб услугите
Както беше обсъдено в предишния раздел, стандартът WS-Security се основава на включването на дефиницията за сигурност в SOAP заглавката. Идентификационните данни в SOAP заглавката се управляват по 2 начина.
Първо, той дефинира специален елемент, наречен UsernameToken. Той се използва за предаване на потребителското име и паролата към уеб услугата. Другият начин е да се използва двоичен токен чрез BinarySecurityToken. Това се използва в ситуации, в които се използват техники за криптиране като Kerberos или X.509.
Диаграмата по-долу показва как работи моделът за сигурност в WS Security.
По-долу са стъпките, които се изпълняват в горния работен процес:
- Заявка може да бъде изпратена от клиента на уеб услугата към услугата за токени за сигурност (Security Token Service). Тази услуга може да бъде междинна уеб услуга, специално създадена за предоставяне на потребителски имена/пароли или сертификати на действителната SOAP уеб услуга.
- След това маркерът за сигурност се предава на клиента на уеб услугата.
- След това клиентът на уеб услугата извиква уеб услугата, но този път се уверява, че токенът за сигурност е вграден в SOAP съобщението.
- След това уеб услугата разбира SOAP съобщението с маркера за удостоверяване и след това може да се свърже с услугата Security Token, за да види дали маркерът за сигурност е автентичен или не.
Следният фрагмент показва формата на частта за удостоверяване, която е част от 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 щракнете върху опцията от менюто File->New project.
След като щракнете върху опцията Нов проект, Visual Studio ще ви даде друг диалогов прозорец за избор на типа проект и за предоставяне на необходимите подробности за проекта. Това е обяснено в следващата стъпка.
Стъпка 2) В този етап,
- Уверете се, че първо сте избрали C# уеб шаблон за ASP.NET уеб приложение. Проектът трябва да е от този тип, за да се създаде проект за уеб услуги. Като изберете тази опция, Visual Studio ще извърши необходимите стъпки за добавяне на необходимите файлове, които са необходими на всяко уеб-базирано приложение.
- Дайте име за вашия проект, което в нашия случай е дадено като „webservice.asmx„След това не забравяйте да посочите място, където ще се съхраняват файловете на проекта.
След като сте готови, ще видите създадения файл на проекта в Solution Explorer във Visual Studio 2013.
Стъпка 3) В тази стъпка ще добавим файл на уеб услуга към нашия проект.
- Първо, щракнете с десния бутон върху файла на проекта, както е показано по-долу.
- След като щракнете с десния бутон върху файла на проекта, имате възможност да изберете опцията „Добавяне->Уеб услуга (ASMX)“, за да добавите файл на уеб услуга. Просто посочете име на Tutorial Service за файла с името на уеб услугата.
Горната стъпка ще отвори диалогов прозорец, в който можете да въведете името на файла на уеб услугата. В диалоговия прозорец по-долу въведете името TutorialService като име на файла.
Стъпка 4) Добавете следния код към вашия asmx файл на Tutorial Service. Кодовият фрагмент по-долу се използва за добавяне на персонализиран клас, който ще се използва за промяна на SOAP Header, когато се генерира SOAP съобщение. Тъй като сега искаме да добавим идентификационни данни за сигурност към SOAP заглавката, тази стъпка е задължителна.
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Code Обяснение:
- Сега създаваме отделен клас, наречен AuthHeader който е от тип Клас SoapHeaderВинаги, когато искате да промените какво се предава в SOAP заглавката, трябва да създадете клас, който използва вградения клас SoapHeader на .Net. Чрез персонализиране на SOAP заглавката вече имаме възможността да предаваме „Потребителско име“ и „Парола“ при извикване на уеб услугата.
- След това дефинираме променливи на 'UserName' и 'Password', които са от тип 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); } else return "This is a Guru99 Web service"; }
Code Обяснение:
- Тук създаваме обект от класа AuthHeader, който беше създаден в по-ранната стъпка. Този обект ще бъде предаден на нашия Guru99Уебсервиз в който потребителското име и паролата могат да бъдат разгледани внимателно.
- Атрибутът [SoapHeader] се използва сега, за да се укаже, че когато се извика уеб услугата, тя трябва да има потребителско име и парола.
- В този блок код всъщност проверяваме потребителското име и паролата, подадени при извикване на уеб услугата. Ако потребителското име е равно на „Guru99“ и паролата е равна на „Guru99Password“, след което съобщението „Това е Guru„99 Уеб услуга“ се предава на клиента. В противен случай, ако бъдат подадени грешни потребителски идентификатор и парола, на клиента ще бъде изпратена грешка.
Ако кодът се изпълни успешно, ще се покаже следният изход, когато стартирате кода си в браузъра.
Изход:
Горният резултат се показва, когато програмата се изпълни, което означава, че уеб услугата вече е достъпна. Нека щракнем върху Услугата Descriptйонна връзка.
От описанието на услугата вече ще можете да видите, че потребителското име и паролата са елементи на wsdl файл. Тези параметри трябва да бъдат изпратени при извикване на уеб услугата.
Най-добри практики за сигурност на уеб услугите
Следните съображения за сигурност трябва да се имат предвид при работа с уеб услуги:
- Одит и управление на лог файлове – Използвайте регистриране на приложения, за да регистрирате всички заявки, постъпващи към уеб услугите. Това дава подробен отчет за това кой е извикал уеб услугата и може да помогне при анализ на въздействието, ако възникне нарушение на сигурността.
- Поток от повиквания към уеб услугата – Опитайте се да обърнете внимание на потока от повиквания в уеб услугите. По подразбиране едно приложение може да извика множество заявки за уеб услуги с токени за удостоверяване, предавани между тези уеб услуги. Всички повиквания между уеб услугите трябва да бъдат наблюдавани и регистрирани.
- Чувствителна информация – Не включвайте чувствителна информация в записите си в лога, като пароли, номера на кредитни карти или друга поверителна информация. Ако има събитие, което съдържа такава информация, тя трябва да бъде изтрита преди регистриране.
- Track Бизнес Operaции - Track важни бизнес операции. Например, инструментирайте приложението си да записва достъпа до особено чувствителни методи и бизнес логика. Вземете пример с онлайн магазинping приложение. В едно типично приложение има няколко стъпки, като например избор на артикулите за закупуване, зареждането на артикулите в количката и след това окончателната покупка. Целият този бизнес работен процес трябва да бъде tracобработени от уеб услугата.
- Правилно удостоверяване – Удостоверяването е механизмът, чрез който клиентите могат да установят своята самоличност с уеб услугата, използвайки определен набор от идентификационни данни, които могат да докажат тази самоличност. Никога не трябва да се съхраняват потребителските идентификационни данни и следователно, ако WS Security се използва за извикване на уеб услугата, трябва да се отбележи, че уеб услугата не трябва да съхранява идентификационните данни, които се изпращат в SOAP заглавката. Те трябва да бъдат отхвърлени от уеб услугата.














