REST API Security Guide

viden om, hvordan man sikrer REST API ‘er, er lige så vigtigt som at skrive API’ erne selv. For det meste er REST API ‘ er HTTP-protokolbaserede, og enhver bruger, der har internetforbindelse, kan få adgang til dem, og det kan også dårlige brugere også. Det er meget vigtigt at skrive sikre API ‘ er for at beskytte virksomheden.

før vi begynder at sikre RESTful API ‘ er, lad os forstå, hvad alle er vores muligheder som udviklere? Hvad passer godt til vores brugtilfælde?

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

forskel mellem godkendelse vs. autorisation

før vi hopper ind i hoveddiskussionen, lad os gøre vores fakta lige om, hvad der er godkendelse, og hvad der er autorisation.

på almindeligt simpelt engelsk er godkendelse processen med at fastslå, at “er brugeren virkelig en person, som han hævder at være”. Teknisk set er det processen med login til systemet via brugernavn / adgangskode eller lignende mekanismer, f.eks. scanning af fingeraftryk, sikkerhedstoken, sikkerhedsspørgsmål eller SAML-token modtaget fra SSO login. Der skal være noget, der kan identificere brugeren fra andre.

når brugeren er inde i systemet, henviser autorisation til regler, der bestemmer “hvad brugeren har lov til at gøre”, og hvad han ikke er, f.eks. Autorisation ses ofte som både den indledende opsætning af tilladelser af en systemadministrator og kontrol af de tilladelsesværdier, der allerede er konfigureret, når en bruger får adgang til systemet.

når vi sikrer afslappende internettjenester, er vi nødt til at tage os af begge faktorer. De to begreber er helt ortogonale og uafhængige, men begge er centrale for sikkerhedsdesign, og manglen på at få en korrekt øger chancerne for kompromitteret system..

fire måder at sikre RESTful internettjenester

der er flere måder at sikre en RESTful API i Java. Lad os gennemgå 4 mest populære valg:

2.1. Grundlæggende godkendelse

det er enkleste af alle teknikker og sandsynligvis også mest anvendte. Du bruger login / adgangskode formularer-det er kun grundlæggende godkendelse. Du indtaster dit brugernavn og adgangskode og sender formularen til serveren, og applikationen identificerer dig som bruger – du har lov til at bruge systemet – ellers får du fejl.

hovedproblemet med denne sikkerhedsimplementering er, at legitimationsoplysninger udbredes på en almindelig måde fra klienten til serveren. Legitimationsoplysninger er blot kodet med Base64 i transit, men ikke krypteret eller hashet på nogen måde. På denne måde kunne enhver sniffer læse de sendte pakker over netværket.

HTTPS foretrækkes derfor typisk frem for eller bruges i forbindelse med grundlæggende godkendelse, hvilket gør samtalen med internetserveren helt krypteret. Det bedste er, at ingen engang kan gætte udefra, at Basic Auth finder sted.

2.2. DIGEST Authentication

denne godkendelsesmetode gør brug af en hashing algoritmer til at kryptere adgangskoden (kaldet adgangskode hash) indtastet af brugeren, før du sender den til serveren. Dette gør det naturligvis meget sikrere end den grundlæggende godkendelsesmetode, hvor brugerens adgangskode bevæger sig i almindelig tekst, der let kan læses af den, der opfanger den.

Læs mere: Generer krypterede adgangskoder

der er også mange sådanne hashingalgoritmer i java, som kan vise sig virkelig effektive til adgangskodesikkerhed som MD5, SHA, BCrypt, SCrypt og Pbkdf2medhmacsha1 algoritmer.

husk, at når denne adgangskode hash er genereret og gemt i databasen, kan du ikke konvertere den tilbage til oprindelige adgangskode. Hver gang brugeren logger ind på applikationen, skal du regenerere adgangskode hash igen og matche med hash, der er gemt i databasen. Så hvis brugeren har glemt sin adgangskode, skal du sende ham en midlertidig adgangskode og bede ham om at ændre den med sin nye adgangskode. Nå, det er almindelig tendens nu om dage.

2.3. Klient cert-godkendelse

dette er en mekanisme, hvor der etableres en tillidsaftale mellem serveren og klienten gennem certifikater. De skal underskrives af et agentur, der er oprettet for at sikre, at certifikatet, der præsenteres til godkendelse, er legitimt, hvilket er kendt som CA.

ved hjælp af denne teknik, når klienten forsøger at få adgang til en beskyttet ressource, i stedet for at give et Brugernavn eller en adgangskode, præsenterer den certifikatet til serveren. Certifikatet indeholder brugeroplysninger til godkendelse, herunder sikkerhedsoplysninger, foruden et unikt privat-offentligt nøglepar. Serveren bestemmer derefter, om brugeren er legitim gennem CA. Derudover skal det kontrollere, om brugeren har adgang til ressourcen. Denne mekanisme skal bruge HTTPS som kommunikationsprotokol, da vi ikke har en sikker kanal for at forhindre nogen i at stjæle klientens identitet.

du kan finde en komplet tutorial til generering af sikkerhedscertifikat i officielle oracle docs.

2.4. OAuth2 API Keys

hvis du nogensinde har udviklet applikationer, der interagerer andre med andre applikationer over cloud f.eks Facebook integration eller kvidre godkendelse osv. så har du allerede brugt dette. De kræver, at du giver API-nøgle og API-hemmelighed for at identificere dig med rette. Disse API nøgle og hemmelighed er nogle tilfældige kodet streng, som er umuligt at gætte.

for at forstå, hvordan det fungerer, lad os antage, at du bruger en Flickr (photo sharing application) og vil sende nogle af dine fotos ved hjælp af det REST API. Du bygger anmodningen som dokumenteret i Flickr docs og sender den derefter.

når du modtager anmodningen, godkender Flickr derefter brugeren ved at læse oplysningerne fra API-nøglen med den hemmelige nøgle, der tilhører brugeren. Når disse valideringer er vellykkede, leverer serveren svaret til klienten. Således får vi et svar med alle de fotos, der for nylig er blevet sendt inden for Flickr.

som du vil bemærke, kan du nemt oprette applikationer ved hjælp af udbyderens API. Udbyderen giver dig også mulighed for at godkende, få adgang til offentlige oplysninger.

hvis nogen begynder at respektere aftaler, f.eks. afsendelse af uønsket trafik eller enhver overtrædelse af politikken, trækker udbyderen API-nøglen tilbage og forhindrer misbrug af dens API ‘ er.

REST API-Sikkerhedsimplementeringer

bortset fra ovenstående koncepter skal du normalt sikre dine afslappende API ‘ er i din virksomhed ved hjælp af nedenstående metoder.

3.1.

grænsefladen javax.ws.rs.core.SecurityContext giver adgang til sikkerhedsrelaterede oplysninger til en anmodning og ligner meget javax.servlet.http.HttpServletRequest.

Du får adgang til Securitykonteksten ved at injicere en forekomst i et klassefelt, setter-metode eller metodeparameter ved hjælp af javax.ws.rs.core.Context – annotationen, f.eks. i nedenstående kode sc.isUserInRole() bruges til at kontrollere autorisation for brugeren.

3.2. JAR-RS-kommentarer til tilladelse til metodeniveau

denne teknik bruges i vid udstrækning i virksomhedsapplikation og bruges til at verificere roller og ansvar for en godkendt brugt – til enhver bestemt operation. Jak-RS giver nedenstående kommentarer til dette formål.

  • @PermitAll
  • @denyall
  • @Rolestilladt

et eksempel brug af annotation kan være:

Læs mere : Eksempel på godkendelse og autorisation

REST API Security Best Practices

lad os notere nogle vigtige punkter, mens du designer sikkerhed til dine afslappende internettjenester.

  1. Brug kun HTTPS-protokollen, så hele din kommunikation altid er krypteret.
  2. send aldrig auth-legitimationsoplysninger eller API-nøgler som forespørgselsparam. De vises i URL og kan logges eller spores nemt.
  3. brug hårdeste kryptering niveau altid. Det vil hjælpe med at have mere tillid.
  4. for ressourcer, der er udsat for RESTful-tjenester, er det vigtigt at sikre, at enhver PUT, POST og DELETE-anmodning er beskyttet mod forfalskning af anmodninger på tværs af sider.
  5. altid validere input data asap det er modtaget i server metode. Brug kun primitive data som inputparameter så meget som muligt.
  6. Stol på Rammer Forudsat Validering funktioner, som de er testet af store samfund allerede.

lad mig vide dine tanker og erfaringer om, hvordan du sikrer afslappende internettjenester i din organisation.

Glad Læring !!

var dette indlæg nyttigt?

lad os vide, hvis du kunne lide indlægget. Det er den eneste måde, vi kan forbedre.
Ja
Nej

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.

More: