Web Service (WS) Security Tutorial with SOAP Example

Innholdsfortegnelse:

Anonim

Hva er WS Security?

WS Security er en standard som adresserer sikkerhet når data utveksles som en del av en webtjeneste. Dette er en nøkkelfunksjon i SOAP som gjør det veldig populært for å lage webtjenester.

Sikkerhet er en viktig funksjon i alle webapplikasjoner. Siden nesten alle webapplikasjoner er eksponert for internett, er det alltid en sjanse for en sikkerhetstrussel mot webapplikasjoner. Derfor, når du utvikler nettbaserte applikasjoner, anbefales det alltid å sikre at applikasjonen er designet og utviklet med tanke på sikkerhet.

I denne veiledningen vil du lære-

  • Sikkerhetstrusler og mottiltak
  • Sikkerhetsstandarder for webtjenester
  • Hvordan bygge sikre webtjenester
  • Beste praksis for webservicesikkerhet

Sikkerhetstrusler og mottiltak

For å forstå sikkerhetstrusler som kan være fiendtlige mot en webapplikasjon, la oss se på et enkelt scenario for en webapplikasjon og se hvordan det fungerer når det gjelder sikkerhet.

Et av sikkerhetstiltakene som er tilgjengelige for HTTP er HTTPS-protokollen. HTTPS er den sikre måten å kommunisere mellom klienten og serveren på nettet. HTTPS benytter Secure Sockets-laget eller SSL for sikker kommunikasjon. Både klienten og serveren vil ha et digitalt sertifikat for å identifisere seg som ekte når kommunikasjon skjer mellom klienten og serveren.

I en standard HTTPS-kommunikasjon mellom klienten og serveren finner du følgende trinn

  1. Klienten sender en forespørsel til serveren via klientsertifikatet. Når serveren ser klientsertifikatet, lager det et notat i cache-systemet, slik at det vet at svaret bare skal gå tilbake til denne klienten.
  2. Serveren autentiserer seg deretter til klienten ved å sende sertifikatet. Dette sikrer at klienten kommuniserer med riktig server.
  3. All kommunikasjon deretter mellom klienten og serveren er kryptert. Dette sikrer at hvis andre brukere prøver å bryte sikkerheten og få de nødvendige dataene, vil de ikke kunne lese dem fordi de ville være kryptert.

Men ovennevnte type sikkerhet vil ikke fungere i alle situasjoner. Det kan komme en tid da klienten kan snakke med flere servere. Et eksempel gitt nedenfor viser en klient som snakker til både en database og en webserver om gangen. I slike tilfeller kan ikke all informasjon passere gjennom https-protokollen.

Det er her SOAP kommer i aksjon for å overvinne slike hindringer ved å ha WS Security-spesifikasjonen på plass. Med denne spesifikasjonen er alle sikkerhetsrelaterte data definert i SOAP-headerelementet.

Overskriftselementet kan inneholde informasjonen som er nevnt nedenfor

  1. Hvis meldingen i SOAP-kroppen er signert med en hvilken som helst sikkerhetsnøkkel, kan den nøkkelen defineres i topptekstelementet.
  2. Hvis noe element i SOAP Body er kryptert, vil overskriften inneholde de nødvendige krypteringsnøklene slik at meldingen kan dekrypteres når den når målet.

I flere servermiljøer hjelper teknikken ovenfor for SOAP-autentisering på følgende måte.

  • Siden SOAP-kroppen er kryptert, vil den bare kunne dekrypteres av webserveren som er vert for webtjenesten. Dette er på grunn av hvordan SOAP-protokollen er designet.
  • Anta at hvis meldingen blir sendt til databaseserveren i en HTTP-forespørsel, kan den ikke dekrypteres fordi databasen ikke har riktige mekanismer for å gjøre det.
  • Bare når forespørselen faktisk når webserveren som en SOAP-protokoll, vil den kunne tyde meldingen og sende riktig svar tilbake til klienten.

Vi vil se i de påfølgende emnene om hvordan WS Security-standarden kan brukes til SOAP.

Sikkerhetsstandarder for webtjenester

Som diskutert i den tidligere delen, dreier WS-Security-standarden seg om å ha sikkerhetsdefinisjonen inkludert i SOAP Header.

Påloggingsinformasjonen i SOAP-overskriften administreres på to måter.

Først definerer det et spesielt element som heter UsernameToken. Dette brukes til å overføre brukernavn og passord til webtjenesten.

Den andre måten er å bruke en Binary Token via BinarySecurityToken. Dette brukes i situasjoner der krypteringsteknikker som Kerberos eller X.509 brukes.

Diagrammet nedenfor viser flyten av hvordan sikkerhetsmodellen fungerer i WS Security

Nedenfor er trinnene som finner sted i arbeidsflyten ovenfor

  1. En forespørsel kan sendes fra webtjenesteklienten til Security Token Service. Denne tjenesten kan være en mellomtjeneste som er spesielt utviklet for å levere brukernavn / passord eller sertifikater til den faktiske SOAP-nettjenesten.
  2. Sikkerhetstoken overføres deretter til webtjenesteklienten.
  3. Nettjeneste-klienten ringte deretter nettjenesten, men denne gangen, sørget for at sikkerhetstokenet er innebygd i SOAP-meldingen.
  4. Nettjenesten forstår deretter SOAP-meldingen med godkjenningstokenet og kan deretter kontakte Security Token-tjenesten for å se om sikkerhetstokenet er autentisk eller ikke.

Utklippet nedenfor viser formatet for autentiseringsdelen som er en del av WSDL-dokumentet. Basert på utdraget nedenfor, vil SOAP-meldingen inneholde 2 ekstra elementer, den ene er brukernavnet og den andre er passordet.

Når SOAP-meldingen faktisk sendes mellom klientene og serveren, kan den delen av meldingen som inneholder brukerlegitimasjonen, se ut som den som er vist ovenfor. Wsse-elementnavnet er et spesielt element som er definert for SOAP og betyr at det inneholder sikkerhetsbasert informasjon.

Hvordan bygge sikre webtjenester

La oss se på sikkerhetseksemplet på SOAP-nettjeneste. Vi vil bygge en webservicesikkerhet på eksemplet som ble demonstrert tidligere i SOAP-kapittelet, og vil legge til et sikkerhetslag til det.

I vårt eksempel skal vi lage en enkel webtjeneste, som vil bli brukt til å returnere en streng til applikasjonen som kaller webtjenesten. Men denne gangen, når nettjenesten påkalles, må legitimasjonen leveres til den kallende tjenesten. La oss følge trinnene nedenfor for å opprette SOAP-nettjenesten vår og legge til sikkerhetsdefinisjonen til den.

Trinn 1) Det første trinnet er å opprette en tom Asp.Net-webapplikasjon. Fra Visual Studio 2013 klikker du på menyvalget File-> New project.

Når du klikker på alternativet Nytt prosjekt, vil Visual Studio gi deg en annen dialogboks for å velge prosjekttype og gi de nødvendige detaljene om prosjektet. Dette blir forklart i neste trinn

Trinn 2) I dette trinnet,

  1. Forsikre deg om at du først velger C # -malen for ASP.NET-webapplikasjonen. Prosjektet må være av denne typen for å kunne opprette webtjenesteprosjekt. Ved å velge dette alternativet vil Visual Studio deretter utføre de nødvendige trinnene for å legge til nødvendige filer som kreves av ethvert nettbasert program.
  2. Gi et navn på prosjektet ditt, som i vårt tilfelle er gitt som " webservice.asmx. " Så sørg for å oppgi et sted der prosjektfilene vil bli lagret.

Når du er ferdig, vil du se prosjektfilen som ble opprettet i løsningsutforskeren din i Visual Studio 2013.

Trinn 3) I dette trinnet,

Vi skal legge til en webtjenestefil i prosjektet vårt

  1. Høyreklikk først på prosjektfilen som vist nedenfor
  1. Når du høyreklikker på prosjektfilen, har du sjansen til å velge alternativet "Add-> Web Service (ASMX) for å legge til en webtjenestefil. Bare gi et navn på Tutorial Service for webtjenestens navnefil.

Trinnet ovenfor vil be om en dialogboks, der man kan angi navnet på webtjenestefilen. Så i dialogboksen nedenfor, skriv inn navnet på TutorialService som filnavnet.

Trinn 4) Legg til følgende kode i Tutorial Service asmx-filen. Kodebiten nedenfor brukes til å legge til en tilpasset klasse som vil bli brukt til å endre SOAP-overskriften når SOAP-meldingen genereres. Siden vi nå vil legge til sikkerhetsopplysninger i SOAP-overskriften, er dette trinnet nødvendig.

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

Kode Forklaring: -

  1. Vi lager nå en egen klasse kalt AuthHeader, som er av typen SoapHeader-klasse . Når du vil endre hva som blir sendt i SOAP-overskriften, må du opprette en klasse som bruker den innebygde SoapHeader-klassen til .Net. Ved å tilpasse SOAPheader har vi nå muligheten til å sende et 'Brukernavn' og 'Passord' når nettjenesten kalles.
  2. Vi definerer deretter variabler av 'UserName' og 'Password' som er av typen streng. De vil bli brukt til å holde verdiene til brukernavnet og passordet som sendes til nettjenesten.

Trinn 5) Som neste trinn må følgende kode legges til den samme TutorialService.asmx-filen . Denne koden definerer faktisk funksjonen til vår nettjeneste. Denne funksjonen returnerer en streng "Dette er en Guru99-nettjeneste" til klienten. Men denne gangen vil strengen bare returneres hvis klientprogrammet sender legitimasjonen til webtjenesten.

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 oppretter vi et objekt av AuthHeader-klassen som ble opprettet i det tidligere trinnet. Dette objektet vil bli sendt til Guru99Webservice der brukernavnet og passordet kan undersøkes nøye.
  2. [SoapHeader] -attributtet brukes nå til å spesifisere at når nettjenesten kalles, må den passere brukernavnet og passordet.
  3. I denne kodeblokken undersøker vi faktisk brukernavnet og passordet som ble gitt når nettjenesten kalles. Hvis brukernavnet er lik "Guru99" og passordet er lik "Guru99Password", sendes meldingen "This is a Guru99 Web service" til klienten. Ellers vil en feil bli sendt til klienten hvis feil bruker-ID og passord overføres.

Hvis koden er utført vellykket, vil følgende utdata vises når du kjører koden din i nettleseren.

Produksjon:

Ovennevnte utdata vises når programmet kjøres, noe som betyr at nettjenesten nå er tilgjengelig. La oss klikke på lenken Tjenestebeskrivelse.

Fra tjenestebeskrivelsen vil du nå kunne se at brukernavnet og passordet er elementer i WSDL-filen. Disse parametrene må sendes når webtjenesten påkalles.

Beste praksis for webservicesikkerhet

Følgende er sikkerhetshensyn som du bør være oppmerksom på når du arbeider med webtjenester

  1. Revisjon og loggadministrasjon - Bruk applikasjonslogging til å logge alle forespørsler som kommer til webtjenestene. Dette gir en detaljert rapport om hvem som har påkalt webtjenesten og kan hjelpe i konsekvensanalyse hvis det oppstår sikkerhetsbrudd.

  2. Flyt av samtaler til nettjenesten - Prøv å merke flyten av samtalene i webtjenester. Som standard kan et program ringe forespørsel om flere webtjenester med godkjenningstokener sendt mellom disse webtjenestene. Alle samtaler mellom webtjenester må overvåkes og logges.

  3. Sensitiv informasjon - Ikke ta med sensitiv informasjon i loggoppføringene dine, for eksempel passord eller kredittkortnumre eller annen form for konfidensiell informasjon. Hvis det er en hendelse som har noen av denne informasjonen, må den kastes før du logger.

  4. Spor forretningsdrift - Spor betydelig forretningsdrift. Instrument for eksempel applikasjonen din for å registrere tilgang til spesielt sensitive metoder og forretningslogikk. La oss ta et eksempel på en online shoppingapplikasjon. Det er flere trinn i en typisk applikasjon, for eksempel å velge varene som skal kjøpes, varene som er lastet i handlekurven og deretter det endelige kjøpet. Hele denne arbeidsflyten må spores av nettjenesten.

  5. Riktig autentisering - Autentisering er mekanismen der klientene kan etablere sin identitet med nettjenesten ved hjelp av et bestemt sett med legitimasjon som kan bevise den identiteten. Man bør aldri lagre brukerlegitimasjonen, og derfor, hvis WS Security brukes til å ringe til nettjenesten, må det bemerkes at nettjenesten ikke skal lagre legitimasjonen som sendes i SOAP-overskriften. Disse skal kastes av nettjenesten.

Sammendrag

  • SOAP gir et ekstra lag kalt WS Security for å gi ekstra sikkerhet når du ringer til webtjenester.
  • WS Security kan ringes med et enkelt brukernavn eller passord eller kan brukes med binære sertifikater for autentisering
  • Vi har sett at i .Net kan vi tilpasse webtjenesten til å få et brukernavn og passord passert som en del av SOAP-headerelementet.