Veebiteenuse (WS) turbeõpetus koos SOAP-i näitega
Mis on WS Security?
WS Security on standard, mis käsitleb turvalisust, kui andmeid vahetatakse veebiteenuse osana. See on SOAPi põhifunktsioon, mis muudab selle veebiteenuste loomisel väga populaarseks.
Turvalisus on iga veebirakenduse oluline funktsioon. Kuna peaaegu kõik veebirakendused on Internetiga kokku puutunud, on veebirakenduste jaoks alati turvaoht. Seetõttu on veebipõhiste rakenduste arendamisel alati soovitatav jälgida, et rakendus oleks loodud ja arendatud turvalisust silmas pidades.
Turvaohud ja vastumeetmed
Et mõista turvaohtusid, mis võivad olla veebirakenduse suhtes vaenulikud, vaatame veebirakenduse lihtsat stsenaariumi ja vaatame, kuidas see turvalisuse osas töötab.
Üks HTTP jaoks saadaolevatest turvameetmetest on HTTPS-protokoll. HTTPS on turvaline suhtlusviis kliendi ja serveri vahel üle veebi. HTTPS kasutab turvaliseks suhtluseks kihti Secure Sockets ehk SSL-i. Nii kliendil kui ka serveril on digitaalne sertifikaat, mis võimaldab tuvastada end ehtsana, kui kliendi ja serveri vahel toimub igasugune suhtlus.
Kliendi ja serveri vahelises standardses HTTPS-suhtluses toimuvad järgmised sammud
- Klient saadab kliendi sertifikaadi kaudu päringu serverile. Kui server näeb kliendi sertifikaati, teeb ta oma vahemälusüsteemi märkuse, et ta teaks, et vastus peaks naasma ainult sellele kliendile.
- Seejärel autentib server end kliendile, saates oma sertifikaadi. See tagab, et klient suhtleb õige serveriga.
- Kogu edasine suhtlus kliendi ja serveri vahel on krüpteeritud. See tagab, et kui mõni teine kasutaja üritab turvalisust murda ja vajalikke andmeid hankida, ei saa nad neid lugeda, kuna need oleksid krüptitud.
Kuid ülaltoodud turvatüüp ei tööta kõigis olukordades. Võib tulla aeg, mil klient saab rääkida mitme serveriga. Allpool toodud näide näitab, et klient räägib korraga nii andmebaasi kui ka veebiserveriga. Sellistel juhtudel ei saa kogu teave https-protokolli läbida.
See on koht, kus SOAP hakkab sellistest takistustest üle saama, võttes kasutusele WS Security spetsifikatsiooni. Selle spetsifikatsiooniga on kõik turbega seotud andmed määratletud SOAP-i päiseelemendis.
Päise element võib sisaldada alltoodud teavet
- Kui SOAP-i kehas olev sõnum on allkirjastatud mis tahes turvavõtmega, saab selle võtme määratleda päiseelemendis.
- Kui mõni element SOAP Body sees on krüpteeritud, sisaldab päis vajalikke krüpteerimisvõtmeid, et sõnumit saaks dekrüpteerida, kui see sihtkohta jõuab.
Mitme serveri keskkonnas aitab ülaltoodud SOAP-autentimise tehnika järgmisel viisil.
- Kuna SOAP-i keha on krüptitud, saab seda dekrüpteerida ainult veebiteenust majutav veebiserver. Selle põhjuseks on SOAP-protokolli ülesehitus.
- Oletame, et kui sõnum edastatakse andmebaasiserverile HTTP päringuga, ei saa seda dekrüpteerida, kuna andmebaasil pole selleks õigeid mehhanisme.
- Alles siis, kui päring tegelikult SOAP-protokollina veebiserverisse jõuab, suudab see sõnumi dešifreerida ja vastava vastuse kliendile tagasi saata.
Näeme järgmistes teemades, kuidas saab WS-i turvastandardit kasutada SOAP.
Veebiteenuse turvastandardid
Nagu eelmises jaotises arutletud, põhineb WS-turvastandard SOAP-i päises turbemääratluse lisamisel.
SOAP-päises olevaid mandaate hallatakse kahel viisil.
Esiteks määratleb see spetsiaalse elemendi nimega UsernameToken. Seda kasutatakse kasutajanime ja parooli edastamiseks veebiteenusele.
Teine võimalus on kasutada binaarmärki BinarySecurityTokeni kaudu. Seda kasutatakse olukordades, kus kasutatakse krüpteerimistehnikaid, nagu Kerberos või X.509.
Allolev diagramm näitab, kuidas turbemudel WS Securitys töötab
Allpool on toodud ülaltoodud töövoo etapid
- Veebiteenuse kliendilt saab päringu saata turvamärgiteenusele. See teenus võib olla vahepealne veebiteenus, mis on spetsiaalselt loodud kasutajanimede/paroolide või sertifikaatide varustamiseks tegelikule SOAP-i veebiteenusele.
- Seejärel edastatakse turvamärk veebiteenuse kliendile.
- Seejärel helistas veebiteenuse klient veebiteenusele, kuid seekord tagades, et turvamärk on SOAP-sõnumisse manustatud.
- Seejärel mõistab veebiteenus autentimisloaga SOAP-sõnumit ja saab seejärel ühendust võtta turvamärgi teenusega, et näha, kas turvamärk on autentne või mitte.
Allolev väljavõte näitab WSDL-dokumendi osaks oleva autentimisosa vormingut. Nüüd sisaldab SOAP-sõnum alloleva lõigu põhjal 2 lisaelementi, millest üks on kasutajanimi ja teine parool.
<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>
Kui SOAP-sõnum klientide ja serveri vahel tegelikult edastatakse, võib kasutaja mandaate sisaldav osa sõnumist välja näha nagu ülal näidatud. Elemendi wsse nimi on SOAP jaoks määratud spetsiaalne element, mis tähendab, et see sisaldab turvapõhist teavet.
Kuidas luua turvalisi veebiteenuseid
Vaatame nüüd SOAP-i veebiteenuse turvanäidet. Ehitame veebiteenuse turbe SOAP-i peatükis varem näidatud näite põhjal ja lisame sellele turvakihi.
Meie näites loome lihtsa veebiteenuse, mida kasutatakse stringi tagastamiseks veebiteenust kutsuvale rakendusele. Kuid seekord, kui veebiteenust käivitatakse, tuleb mandaadid helistamisteenusele edastada. Järgime alltoodud samme, et luua oma SOAP-i veebiteenus ja lisada sellele turvadefinitsioon.
Step 1) Esimene samm on tühja ruumi loomine Asp.Net Veebirakendus. Visual Studio 2013-s klõpsake menüükäsku Fail->Uus projekt.
Kui klõpsate suvandil Uus projekt, annab Visual Studio teile uue dialoogiboksi projekti tüübi valimiseks ja projekti vajalike üksikasjade esitamiseks. Seda selgitatakse järgmises etapis
Step 2) Selles sammus
- Veenduge, et valite esmalt C# ASP.NET-i veebirakenduse veebimall. Veebiteenuste projekti loomiseks peab projekt seda tüüpi olema. Selle valiku valimisel viib Visual Studio seejärel läbi vajalikud toimingud vajalike failide lisamiseks, mida nõuavad mis tahes veebipõhised rakendused.
- Andke oma projektile nimi, mis meie puhul on antud kui "webservice.asmx.” Seejärel määra kindlasti koht, kuhu projektifailid salvestatakse.
Kui olete lõpetanud, näete Visual Studio 2013 lahendusuurijas loodud projektifaili.
Step 3) Selles sammus
Lisame oma projektile veebiteenuse faili
- Kõigepealt paremklõpsake projekti failil, nagu allpool näidatud
- Kui teete projekti failil paremklõpsu, on teil võimalus veebiteenuse faili lisamiseks valida suvand "Lisa-> Veebiteenus (ASMX). Sisestage veebiteenuse nimefaili jaoks lihtsalt Tutorial Service'i nimi.
Ülaltoodud samm kuvab dialoogiboksi, kuhu saab sisestada veebiteenuse faili nime. Seega sisestage allolevasse dialoogiboksi failinimeks TutorialService'i nimi.
Step 4) Lisage oma Tutorial Service asmx-faili järgmine kood. Allolevat koodilõiku kasutatakse kohandatud klassi lisamiseks, mida kasutatakse SOAP-i päise muutmiseks SOAP-sõnumi loomisel. Kuna tahame nüüd lisada SOAP-päisesse turvamandaadid, on see samm kohustuslik.
return "This is a Guru99 Web Service";
}
public class AuthHeader : SoapHeader
{
public string UserName;
public string Password;
}
}
Koodi selgitus: -
- Nüüd loome eraldi klassi nimega AuthHeader mis on tüüpi SoapHeader klass. Kui soovite muuta SOAP-i päises edastatavat, tuleb luua klass, mis kasutab .Neti sisseehitatud klassi SoapHeader. Kohandades SOAPheaderit, on meil nüüd võimalus veebiteenuse kutsumisel edastada kasutajanimi ja parool.
- Seejärel määratleme muutujad "Kasutajanimi" ja "Parool", mis on stringi tüüpi. Neid kasutatakse veebiteenusele edastatavate kasutajanime ja parooli väärtuste hoidmiseks.
Step 5) Järgmise sammuna tuleb sellele lisada järgmine kood TutorialService.asmx faili. See kood määratleb tegelikult meie veebiteenuse funktsiooni. See funktsioon tagastab kliendile stringi "See on Guru99 veebiteenus". Kuid seekord tagastatakse string ainult siis, kui kliendirakendus edastab mandaadid veebiteenusele.
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";
}
Koodi selgitus: -
- Siin loome AuthHeaderi klassi objekti, mis loodi eelmises etapis. See objekt antakse meie käsutusse Guru99veebiteenus kus saab kasutajanime ja parooli lähemalt uurida.
- Atribuuti [SoapHeader] kasutatakse nüüd selleks, et määrata, et kui veebiteenust kutsutakse, peavad sellel olema edastatud kasutajanimi ja parool.
- Selles koodiplokis uurime tegelikult veebiteenuse kutsumisel edastatud kasutajanime ja parooli. Kui kasutajanimi on võrdne "Guru99" ja parool on võrdne "Guru99Password", edastatakse kliendile teade "See on Guru99 veebiteenus". Vastasel juhul saadetakse kliendile veateade, kui sisestatakse vale kasutajatunnus ja parool.
Kui kood on edukalt käivitatud, kuvatakse koodi brauseris käivitamisel järgmine väljund.
Väljund:
Ülaltoodud väljund kuvatakse programmi käivitamisel, mis tähendab, et veebiteenus on nüüd saadaval. Klõpsame teenusel Descriptioon link.
Teenuse kirjeldusest näete nüüd, et kasutajanimi ja parool on teenuse elemendid wsdl faili. Need parameetrid tuleb saata veebiteenuse käivitamisel.
Veebiteenuste turvalisuse parimad tavad
Järgnevalt on toodud turvakaalutlused, mida tuleks veebiteenustega töötamisel arvestada
1. Auditeerimine ja logide haldamine – Kasutage rakenduste logimist, et logida kõik veebiteenustesse saabuvad päringud. See annab üksikasjaliku aruande selle kohta, kes on veebiteenuse käivitanud, ja aitab turvarikkumiste korral mõjuanalüüsi teha.
2. Veebiteenuse kõnede voog – Proovige jälgida kõnede voogu veebiteenustes. Vaikimisi võib rakendus helistada mitmele veebiteenuse päringule nende veebiteenuste vahel edastatud autentimislubadega. Kõiki veebiteenuste vahelisi kõnesid tuleb jälgida ja logida.
3. Tundlik teave – Ärge lisage oma logikirjetesse tundlikku teavet, näiteks paroole või krediitkaardinumbreid ega muud konfidentsiaalset teavet. Kui mõni sündmus sisaldab seda teavet, tuleb see enne logimist ära visata.
4. Jälgi äri Operamine - Jälgige olulisi äritehinguid. Näiteks instrumentige oma rakendus, et salvestada juurdepääs eriti tundlikele meetoditele ja äriloogikale. Võtame näiteks veebipõhise osturakenduse. Tavalises rakenduses on mitu sammu, näiteks ostetavate kaupade valimine, ostukorvi laadimine ja seejärel lõplik ost. Kogu seda ettevõtte töövoogu peab veebiteenus jälgima.
5. Õige autentimine – Autentimine on mehhanism, mille abil kliendid saavad veebiteenusega kindlaks teha oma identiteedi, kasutades teatud identiteedikomplekti, mis suudab seda identiteeti tõestada. Kunagi ei tohiks salvestada kasutaja mandaate ja seega, kui veebiteenusele helistamiseks kasutatakse WS Securityt, tuleb arvestada, et veebiteenus ei tohiks salvestada SOAP päisesse saadetud mandaate. Veebiteenus peaks need ära viskama.
kokkuvõte
- SOAP pakub täiendavat kihti nimega WS Security, et pakkuda veebiteenustele helistamisel täiendavat turvalisust.
- WS Security saab kutsuda lihtsa kasutajanime või parooliga või kasutada autentimiseks binaarsertifikaatidega
- Oleme seda näinud .Net saame kohandada veebiteenust nii, et kasutajanimi ja parool edastatakse SOAP-i päiseelemendi osana.













