Kunnskap om hvordan du sikrer REST Apier er like viktig som å skrive Apiene selv. FOR DET meste ER REST-Apier HTTP-protokollbaserte, og enhver bruker som har internettforbindelse, kan få tilgang til dem,og det kan også dårlige brukere. Det er svært viktig å skrive sikre Apier for å beskytte virksomheten.
før du begynner å sikre RESTful Apier, la oss forstå hva alle er våre alternativer som utviklere? Hva vil være godt egnet for vår bruktilfelle?
Table of Contents1. Authentication vs. Authorization2. Four Ways to Secure RESTful Web Services- BASIC Authentication- DIGEST Authentication- Client CERT Authentication- OAUTH2 API Keys3. RESTful Web Services Security Implementations- Using SecurityContext- Using Annotations4. Best Practices
- Forskjell mellom autentisering vs. autorisasjon
- Fire Måter Å Sikre RESTful Web Services
- 2.1. GRUNNLEGGENDE Autentisering
- 2.2. DIGEST Authentication
- 2.3. Client Cert Authentication
- 2.4. OAUTH2 API Keys
- REST API – Sikkerhetsimplementeringer
- 3.1. Jax-RS SecurityContext-forekomst
- 3.2. JAR-RS-merknader for metodenivå autorisasjon
- Beste PRAKSIS FOR REST API-Sikkerhet
- Var dette innlegget nyttig?
Forskjell mellom autentisering vs. autorisasjon
før du hopper inn i hoveddiskusjonen, la oss gjøre våre fakta rett om hva som er autentisering og hva er autorisasjon.
i vanlig enkel engelsk er autentisering prosessen med å fastslå at «er bruker virkelig noen som han hevder å være». Teknisk sett er det prosessen med å logge inn på systemet via brukernavn / passord eller lignende mekanismer, for eksempel fingeravtrykksskanning, sikkerhetstoken, sikkerhetsspørsmål eller SAML-token mottatt fra SSO-pålogging. Det må være noe som kan identifisere brukeren fra andre.
når brukeren er inne i systemet, refererer autorisasjon til regler som bestemmer «hvilken bruker har lov til å gjøre» og hva han ikke er, f.eks. Autorisasjon blir ofte sett på som både innledende oppsett av tillatelser av en systemadministrator og kontroll av tillatelsesverdiene som allerede er satt opp når en bruker får tilgang til systemet.
Når vi sikrer RESTful web services, må vi ta vare på begge faktorene. De to konseptene er helt ortogonale og uavhengige, men begge er sentrale for sikkerhetsdesign, og manglende evne til å få en riktig øker sjansene for kompromittert system..
Fire Måter Å Sikre RESTful Web Services
det er flere måter å sikre En RESTful API I Java. La oss gå gjennom 4 mest populære valgene:
2.1. GRUNNLEGGENDE Autentisering
det er enkleste av alle teknikker og sannsynligvis mest brukt også. Du bruker innlogging / passord skjemaer-det er bare enkel godkjenning. Du skriver inn brukernavn og passord og sender skjemaet til serveren, og programmet identifiserer deg som bruker – du har lov til å bruke systemet-ellers får du feil.
hovedproblemet med denne sikkerhetsimplementeringen er at legitimasjonene overføres på en enkel måte fra klienten til serveren. Legitimasjon er bare kodet Med Base64 i transitt, men ikke kryptert eller hashed på noen måte. På denne måten kan enhver sniffer lese de sendte pakkene over nettverket.
HTTPS er derfor vanligvis foretrukket over ELLER brukt i forbindelse med Enkel Godkjenning som gjør samtalen med webserveren helt kryptert. Det beste er at ingen selv kan gjette fra utsiden At Grunnleggende Auth finner sted.
2.2. DIGEST Authentication
denne autentiseringsmetoden bruker en hashingalgoritme for å kryptere passordet (kalt passordhash) som er angitt av brukeren før den sendes til serveren. Dette gjør det selvsagt mye tryggere enn den grunnleggende autentiseringsmetoden, der brukerens passord reiser i ren tekst som lett kan leses av den som avskjærer den.
Les Mer: Generere Krypterte Passord
det er mange slike hashing algoritmer i java også, som kan vise seg virkelig effektiv for passordsikkerhet SOM MD5, SHA, BCrypt, SCrypt Og PBKDF2WithHmacSHA1 algoritmer.
Husk at når dette passord hash er generert og lagret i databasen, kan du ikke konvertere den tilbake til opprinnelige passord. Hver gang brukeren logger inn på programmet, må du regenerere passord hash igjen, og matche med hash lagret i databasen. Så, hvis brukeren har glemt passordet sitt, må du sende ham et midlertidig passord og be ham om å endre det med sitt nye passord. Vel, det er vanlig trend nå-en-dager.
2.3. Client Cert Authentication
Dette Er en mekanisme der en klareringsavtale er etablert mellom serveren og klienten gjennom sertifikater. De må være signert av et byrå etablert for å sikre at sertifikatet presentert for godkjenning er legitim, som er kjent SOM CA.
ved hjelp av denne teknikken, når klienten forsøker å få tilgang til en beskyttet ressurs, i stedet for å gi et brukernavn eller passord, presenterer sertifikatet til serveren. Sertifikatet inneholder brukerinformasjonen for godkjenning, inkludert sikkerhetslegitimasjon, i tillegg til et unikt privat-offentlig nøkkelpar. Serveren bestemmer deretter om brukeren er legitim gjennom CA. I tillegg må det kontrollere om brukeren har tilgang til ressursen. DENNE mekanismen må bruke HTTPS som kommunikasjonsprotokoll, da vi ikke har en sikker kanal for å hindre at noen stjeler klientens identitet.
du kan finne en komplett tutorial for å generere sikkerhetssertifikat i offisielle oracle docs.
2.4. OAUTH2 API Keys
hvis du noen gang har utviklet applikasjoner som samhandler med andre applikasjoner over sky, f. eks. facebook-integrasjon eller twitter-godkjenning etc. da har du allerede brukt dette. DE krever AT DU gir API-nøkkel og API-hemmelighet for å identifisere deg riktig. DISSE API-nøkkelen og hemmeligheten er noen tilfeldig kodet streng som er umulig å gjette.
for å forstå hvordan det fungerer, la oss anta at du bruker En Flickr (bildedelingsprogram) og vil legge inn noen av bildene dine ved HJELP AV REST API. Du bygger forespørselen som dokumentert I Flickr docs, og send den deretter.
Da, når du mottar forespørselen, Godkjenner Flickr brukeren ved å lese informasjonen FRA API-nøkkelen med den hemmelige nøkkelen som tilhører brukeren. Når disse valideringene er vellykkede, leverer serveren svaret til klienten. Dermed får vi et svar med alle bildene som nylig er lagt ut På Flickr.
som du vil legge merke til, kan du enkelt lage programmer ved hjelp av leverandørens API. Leverandøren vil også tillate deg å autentisere, få tilgang til offentlig informasjon.
hvis noen begynner å respektere avtaler, for eksempel sende søppelpost eller brudd på retningslinjene, trekker leverandøren API-nøkkelen og forhindrer misbruk av Api-Ene.
REST API – Sikkerhetsimplementeringer
Bortsett fra konseptene ovenfor, må du vanligvis sikre RESTful Api-Ene i firmaet ditt ved hjelp av metodene nedenfor.
3.1. Jax-RS SecurityContext-forekomst
grensesnittet javax.ws.rs.core.SecurityContext
gir tilgang til sikkerhetsrelatert informasjon for en forespørsel og er svært lik javax.servlet.http.HttpServletRequest
.
Du får Tilgang Til SecurityContext ved å injisere en forekomst i et klassefelt, setter-metoden eller metodeparameteren ved hjelp av merknaden javax.ws.rs.core.Context
, f. eks.
3.2. JAR-RS-merknader for metodenivå autorisasjon
denne teknikken er mye brukt i bedriftsapplikasjon og brukes til å verifisere roller og ansvar for en godkjent brukt-for en bestemt operasjon. JAX-RS gir nedenfor merknader for dette formålet.
- @PermitAll
- @Denyall
- @RolesAllowed
et eksempel bruk av merknad kan være:
Les Mer : Jax-RS-godkjenning og autorisasjonseksempel
Beste PRAKSIS FOR REST API-Sikkerhet
la oss notere ned noen viktige punkter mens du utformer sikkerhet for RESTful web services.
- Bruk BARE HTTPS-protokollen slik at hele kommunikasjonen alltid er kryptert.
- send aldri auth-legitimasjon eller API-nøkler som spørringsparam. DE vises I URL og kan logges eller spores enkelt.
- Bruk alltid hardest krypteringsnivå. Det vil hjelpe i å ha mer tillit.
- for ressurser som eksponeres av RESTful web services, er det viktig å sørge for AT ALLE PUT -, POST-og SLETTEFORESPØRSLER er beskyttet mot Forfalskning av Forespørsler På Tvers Av Nettsteder.
- valider alltid inndataene asap den mottas i server-metoden. Bruk bare primitive data som inngangsparameter så mye som mulig.
- Stole på rammeverk gitt validering funksjoner som de er testet av store samfunnet allerede.
Gi meg beskjed om dine tanker og erfaringer om hvordan du sikrer RESTful web services i organisasjonen.
Glad Læring !!