Web Service (WS) Sikkerhedsvejledning med SOAP-eksempel

Indholdsfortegnelse:

Anonim

Hvad er WS Security?

WS Security er en standard, der adresserer sikkerhed, når data udveksles som en del af en webservice. Dette er en nøglefunktion i SOAP, der gør det meget populært til oprettelse af webtjenester.

Sikkerhed er en vigtig funktion i enhver webapplikation. Da næsten alle webapplikationer er udsat for internettet, er der altid en chance for en sikkerhedstrussel mod webapplikationer. Derfor, når der udvikles webbaserede applikationer, anbefales det altid at sikre, at applikationen er designet og udviklet med sikkerhed i tankerne.

I denne vejledning lærer du-

  • Sikkerhedstrusler og modforanstaltninger
  • Websikkerhedsstandarder
  • Sådan opbygges sikre webtjenester
  • Bedste praksis for webservicesikkerhed

Sikkerhedstrusler og modforanstaltninger

For at forstå sikkerhedstrusler, der kan være fjendtlige over for en webapplikation, lad os se på et simpelt scenario for en webapplikation og se, hvordan det fungerer med hensyn til sikkerhed.

En af de tilgængelige sikkerhedsforanstaltninger for HTTP er HTTPS-protokollen. HTTPS er den sikre måde at kommunikere mellem klienten og serveren på nettet. HTTPS gør brug af Secure Sockets-laget eller SSL til sikker kommunikation. Både klienten og serveren har et digitalt certifikat, der identificerer sig som ægte, når der sker kommunikation mellem klienten og serveren.

I en standard HTTPS-kommunikation mellem klienten og serveren finder følgende trin sted

  1. Klienten sender en anmodning til serveren via klientcertifikatet. Når serveren ser klientcertifikatet, laver den en note i sit cache-system, så den ved, at svaret kun skal gå tilbage til denne klient.
  2. Serveren godkender derefter sig selv til klienten ved at sende sit certifikat. Dette sikrer, at klienten kommunikerer med den rigtige server.
  3. Al kommunikation derefter mellem klienten og serveren er krypteret. Dette sikrer, at hvis andre brugere forsøger at bryde sikkerheden og få de krævede data, ville de ikke være i stand til at læse dem, fordi de ville være krypteret.

Men ovennævnte sikkerhedstype fungerer ikke i alle situationer. Der kan komme et tidspunkt, hvor klienten kan tale med flere servere. Et eksempel nedenfor viser en klient, der taler til både en database og en webserver ad gangen. I sådanne tilfælde kan ikke alle oplysninger passere https-protokollen.

Det er her, SOAP kommer i aktion for at overvinde sådanne forhindringer ved at have WS Security-specifikationen på plads. Med denne specifikation er alle sikkerhedsrelaterede data defineret i SOAP-headerelementet.

Overskriftelementet kan indeholde nedenstående oplysninger

  1. Hvis meddelelsen i SOAP-kroppen er underskrevet med en hvilken som helst sikkerhedsnøgle, kan denne nøgle defineres i headerelementet.
  2. Hvis et element i SOAP Body er krypteret, vil overskriften indeholde de nødvendige krypteringsnøgler, så meddelelsen kan dekrypteres, når den når destinationen.

I flere servermiljøer hjælper ovenstående teknik til SOAP-godkendelse på følgende måde.

  • Da SOAP-kroppen er krypteret, kan den kun dekrypteres af den webserver, der er vært for webservicen. Dette skyldes, hvordan SOAP-protokollen er designet.
  • Antag, at hvis meddelelsen sendes til databaseserveren i en HTTP-anmodning, kan den ikke dekrypteres, fordi databasen ikke har de rigtige mekanismer til at gøre det.
  • Først når anmodningen faktisk når webserveren som en SOAP-protokol, vil den være i stand til at dechiffrere meddelelsen og sende det relevante svar tilbage til klienten.

Vi vil se i de efterfølgende emner om, hvordan WS-sikkerhedsstandarden kan bruges til SOAP.

Websikkerhedsstandarder

Som diskuteret i det tidligere afsnit drejer WS-Security-standarden sig om at have sikkerhedsdefinitionen inkluderet i SOAP Header.

Oplysningerne i SOAP-overskriften styres på 2 måder.

For det første definerer det et specielt element kaldet UsernameToken. Dette bruges til at videregive brugernavnet og adgangskoden til webservicen.

Den anden måde er at bruge et binært token via BinarySecurityToken. Dette bruges i situationer, hvor krypteringsteknikker som Kerberos eller X.509 bruges.

Nedenstående diagram viser strømmen af, hvordan sikkerhedsmodellen fungerer i WS Security

Nedenfor er de trin, der finder sted i ovenstående arbejdsgang

  1. En anmodning kan sendes fra webserviceklienten til Security Token Service. Denne tjeneste kan være en mellemliggende webservice, der er specielt bygget til at levere brugernavne / adgangskoder eller certifikater til den aktuelle SOAP-webservice.
  2. Sikkerhedstoken sendes derefter til webserviceklienten.
  3. Webtjenesteklienten ringede derefter til webservicen, men denne gang for at sikre, at sikkerhedstoken er indlejret i SOAP-meddelelsen.
  4. Webtjenesten forstår derefter SOAP-meddelelsen med godkendelsestokenet og kan derefter kontakte tjenesten Sikkerhedstoken for at se, om sikkerhedstokenet er autentisk eller ej.

Nedenstående uddrag viser formatet for godkendelsesdelen, der er en del af WSDL-dokumentet. Baseret på nedenstående uddrag indeholder SOAP-meddelelsen 2 yderligere elementer, hvoraf det ene er brugernavnet og det andet er adgangskoden.

Når SOAP-meddelelsen faktisk sendes mellem klienterne og serveren, kan den del af meddelelsen, der indeholder brugeroplysningerne, ligne den, der er vist ovenfor. Wsse-elementnavnet er et specielt element med navnet defineret til SOAP og betyder, at det indeholder sikkerhedsbaserede oplysninger.

Sådan opbygges sikre webtjenester

Lad os nu se på SOAP-webservicesikkerhedseksempel. Vi bygger en webservicesikkerhed på eksemplet, der blev vist tidligere i SOAP-kapitlet, og vil tilføje et sikkerhedslag til det.

I vores eksempel skal vi oprette en simpel webtjeneste, som bruges til at returnere en streng til applikationen, der kalder webservicen. Men denne gang, når webservicen påberåbes, skal legitimationsoplysningerne leveres til den opkaldende tjeneste. Lad os følge nedenstående trin for at oprette vores SOAP-webservice og føje sikkerhedsdefinitionen til den.

Trin 1) Det første trin er at oprette en tom Asp.Net-webapplikation. Fra Visual Studio 2013 skal du klikke på menupunktet Filer-> Nyt projekt.

Når du klikker på indstillingen Nyt projekt, giver Visual Studio dig derefter en anden dialogboks til valg af projekttype og til at give de nødvendige detaljer om projektet. Dette forklares i det næste trin

Trin 2) I dette trin,

  1. Sørg for, at du først vælger C # -webskabelonen til ASP.NET-webapplikationen. Projektet skal være af denne type for at oprette webserviceprojekt. Ved at vælge denne mulighed udfører Visual Studio derefter de nødvendige trin for at tilføje krævede filer, som kræves af ethvert webbaseret program.
  2. Giv et navn til dit projekt, som i vores tilfælde er blevet givet som " webservice.asmx. " Sørg derefter for at angive en placering, hvor projektfilerne gemmes.

Når du er færdig, vil du se projektfilen oprettet i din løsningsudforsker i Visual Studio 2013.

Trin 3) I dette trin,

Vi vil tilføje en webservicefil til vores projekt

  1. Højreklik først på projektfilen som vist nedenfor
  1. Når du højreklikker på projektfilen, har du chancen for at vælge indstillingen "Tilføj-> Webtjeneste (ASMX) for at tilføje en webservicefil. Angiv blot et selvstudietjeneste til webtjenestens navnefil.

Ovenstående trin vil bede en dialogboks, hvor man kan indtaste navnet på webservicefilen. Så i nedenstående dialogboks skal du indtaste navnet på TutorialService som filnavnet.

Trin 4) Tilføj følgende kode til din Tutorial Service asmx-fil. Nedenstående kodestykke bruges til at tilføje en brugerdefineret klasse, der bruges til at ændre SOAP-overskriften, når SOAP-meddelelsen genereres. Da vi nu vil tilføje sikkerhedsoplysninger til SOAP-overskriften, kræves dette trin.

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

Kode Forklaring: -

  1. Vi opretter nu en separat klasse kaldet AuthHeader, som er af typen SoapHeader-klasse . Når du vil ændre, hvad der sendes i SOAP-headeren, skal du oprette en klasse, der bruger den indbyggede SoapHeader-klasse af .Net. Ved at tilpasse SOAPheader har vi nu muligheden for at videregive et 'Brugernavn' og 'Adgangskode', når webtjenesten kaldes.
  2. Vi definerer derefter variabler af 'Brugernavn' og 'Adgangskode', som er af typen streng. De bruges til at gemme værdierne for brugernavnet og adgangskoden, der sendes til webservicen.

Trin 5) Som det næste trin skal følgende kode føjes til den samme TutorialService.asmx-fil . Denne kode definerer faktisk vores webservices funktion. Denne funktion returnerer en streng "Dette er en Guru99-webtjeneste" til klienten. Men denne gang returneres strengen kun, hvis klientapplikationen videregiver legitimationsoplysningerne til webservicen.

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";}

Kode Forklaring: -

  1. Her opretter vi et objekt af AuthHeader-klassen, der blev oprettet i det tidligere trin. Dette objekt sendes til vores Guru99Webservice , hvor brugernavnet og adgangskoden kan undersøges nøje.
  2. Attributten [SoapHeader] bruges nu til at specificere, at når webservicen kaldes, skal den have brugernavnet og adgangskoden videregivet.
  3. I denne kodeblok undersøger vi faktisk det brugernavn og den adgangskode, der blev videregivet, når webservicen kaldes. Hvis brugernavnet er lig med "Guru99", og adgangskoden er lig med "Guru99Password", sendes meddelelsen "This is a Guru99 Web service" til klienten. Ellers sendes en fejl til klienten, hvis det forkerte bruger-id og adgangskode overføres.

Hvis koden udføres med succes, vises følgende output, når du kører din kode i browseren.

Produktion:

Ovenstående output vises, når programmet køres, hvilket betyder, at webservicen nu er tilgængelig. Lad os klikke på linket Servicebeskrivelse.

Fra servicebeskrivelsen vil du nu kunne se, at brugernavnet og adgangskoden er elementer i WSDL-filen. Disse parametre skal sendes, når webservicen påberåbes.

Bedste praksis for webservicesikkerhed

Følgende er de sikkerhedsmæssige overvejelser, der skal bemærkes, når du arbejder med webtjenester

  1. Auditing og loghåndtering - Brug applikationslogning til at logge alle anmodninger, der kommer til webtjenesterne. Dette giver en detaljeret rapport om, hvem der har påberåbt sig webtjenesten, og kan hjælpe med konsekvensanalyse, hvis der opstår sikkerhedsbrud.

  2. Flow af opkald til webtjenesten - Prøv at bemærke strømmen af ​​opkaldene i webtjenester. Som standard kan en applikation ringe til flere anmodninger om webtjenester med godkendelses-tokens, der sendes mellem disse webtjenester. Alle opkald mellem webservices skal overvåges og logges.

  3. Følsomme oplysninger - Medtag ikke følsomme oplysninger i dine logposter, såsom adgangskoder eller kreditkortnumre eller nogen anden form for fortrolig information. Hvis der er en begivenhed, der har nogen af ​​disse oplysninger, skal de kasseres inden logning.

  4. Spor forretningsdrift - Spor vigtig forretningsdrift. Instrumenter f.eks. Din applikation til at registrere adgang til særligt følsomme metoder og forretningslogik. Lad os tage et eksempel på en online shoppingapplikation. Der er flere trin i en typisk applikation, såsom valg af de varer, der skal købes, de varer, der er lagt i vognen og derefter det endelige køb. Hele denne forretnings workflow skal spores af webservicen.

  5. Korrekt godkendelse - Godkendelse er den mekanisme, hvormed klienterne kan etablere deres identitet med webservicen ved hjælp af et bestemt sæt legitimationsoplysninger, der kan bevise denne identitet. Man skal aldrig gemme brugerlegitimationsoplysningerne, og hvis WS Security bruges til at ringe til webservicen, skal det derfor bemærkes, at webservicen ikke skal gemme de legitimationsoplysninger, der sendes i SOAP-overskriften. Disse skal kasseres af webservicen.

Resumé

  • SOAP giver et ekstra lag kaldet WS Security til at yde ekstra sikkerhed, når der foretages opkald til webtjenester.
  • WS-sikkerheden kan kaldes med et simpelt brugernavn eller en adgangskode eller kan bruges med binære certifikater til godkendelse
  • Vi har set, at vi i .Net kan tilpasse webservicen til at få et brugernavn og en adgangskode sendt som en del af SOAP-headerelementet.