REST API Security Guide

kennis van het beveiligen van REST API ’s is net zo belangrijk als het schrijven van de API’ s zelf. Meestal REST API ‘ s zijn HTTP-protocol gebaseerd, en elke gebruiker met een internetverbinding kan toegang tot hen, en zo kunnen slechte gebruikers ook. Het is erg belangrijk om veilige API ‘ s te schrijven om het bedrijf te beschermen.

voordat we beginnen met het beveiligen van RESTful API ‘ s, laten we begrijpen wat al onze opties als ontwikkelaars zijn? Wat zal goed passen bij onze usecase?

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

verschil tussen authenticatie vs. autorisatie

voordat we in de hoofddiscussie springen, laten we onze feiten duidelijk maken over wat authenticatie is en wat autorisatie is.

in eenvoudig Engels is authenticatie het proces om vast te stellen dat “gebruiker echt iemand is die hij beweert te zijn”. In technische termen, Het is proces van inloggen op het systeem door middel van gebruikersnaam / wachtwoord of soortgelijke mechanismen, bijvoorbeeld vingerafdruk scannen, security token, security vragen of SAML token ontvangen van SSO login. Er moet iets zijn dat de gebruiker van anderen kan identificeren.

zodra de gebruiker zich in het systeem bevindt, verwijst autorisatie naar regels die bepalen “wat de gebruiker mag doen” en wat hij niet is, bijvoorbeeld een normale gebruiker kan een bericht in een openbare groep plaatsen, maar gebruikers die alleen een editor rol hebben kunnen iets verwijderen. Autorisatie wordt vaak gezien als zowel het inleidend instellen van machtigingen door een systeembeheerder als het controleren van de machtigingswaarden die al zijn ingesteld wanneer een gebruiker toegang krijgt tot het systeem.

wanneer we RESTful web services beveiligen, moeten we voor beide factoren zorgen. De twee concepten zijn volledig orthogonaal en onafhankelijk, maar beide zijn centraal in het ontwerp van de beveiliging, en het niet krijgen van een van beide een juiste verhoging van de kans op gecompromitteerde systeem..

vier manieren om RESTful Web Services te beveiligen

er zijn meerdere manieren om een RESTful API te beveiligen in Java. Laten we 4 meest populaire keuzes doornemen:

2.1. Basis authenticatie

het is de eenvoudigste van alle technieken en waarschijnlijk ook het meest gebruikt. U gebruikt login / wachtwoord formulieren – het is alleen basis authenticatie. U voert uw gebruikersnaam en wachtwoord in en stuurt het formulier naar de server, en de toepassing identificeert u als gebruiker – U mag het systeem gebruiken – anders krijgt u een fout.

het grootste probleem met deze beveiligingsimplementatie is dat de referenties op een eenvoudige manier worden doorgegeven van de client naar de server. Referenties worden alleen gecodeerd met Base64 in transit, maar niet versleuteld of gehasht op welke manier dan ook. Op deze manier kan elke sniffer de verzonden pakketten over het netwerk lezen.

HTTPS heeft daarom meestal de voorkeur boven of wordt gebruikt in combinatie met Basisverificatie waardoor het gesprek met de webserver volledig versleuteld is. Het beste deel is dat niemand van buitenaf kan raden dat er fundamentele Auth plaatsvindt.

2.2. Verificatiesamenvatting

deze verificatiemethode maakt gebruik van een hash-algoritme om het wachtwoord te versleutelen dat door de gebruiker is ingevoerd voordat het naar de server wordt verzonden. Dit, uiteraard, maakt het veel veiliger dan de basis authenticatie methode, waarbij het wachtwoord van de gebruiker reist in platte tekst die gemakkelijk kan worden gelezen door wie het onderschept.

Lees meer: genereer versleutelde wachtwoorden

er zijn ook veel van dergelijke hashing-algoritmen in java, die echt effectief kunnen zijn voor wachtwoordbeveiliging, zoals MD5, SHA, BCrypt, Scrypt en PBKDF2WithHmacSHA1-algoritmen.

onthoud dat zodra deze wachtwoordhash is gegenereerd en opgeslagen in de database, u het niet terug kunt converteren naar het oorspronkelijke wachtwoord. Elke keer dat de gebruiker inlogt in de toepassing, moet je opnieuw wachtwoord hash genereren, en overeenkomen met hash opgeslagen in de database. Dus, als de gebruiker zijn/haar wachtwoord vergeten is, moet u hem een tijdelijk wachtwoord sturen en hem vragen om het te wijzigen met zijn nieuwe wachtwoord. Nou, het is een algemene trend nu-in-dagen.

2.3. Client CERT authenticatie

dit is een mechanisme waarbij een vertrouwensovereenkomst tot stand wordt gebracht tussen de server en de client door middel van certificaten. Ze moeten worden ondertekend door een instantie die is opgericht om ervoor te zorgen dat het certificaat dat wordt gepresenteerd voor authenticatie legitiem is, dat bekend staat als CA.

wanneer de client probeert toegang te krijgen tot een beveiligde bron, in plaats van een gebruikersnaam of wachtwoord op te geven, wordt het certificaat aan de server gepresenteerd. Het certificaat bevat de gebruikersinformatie voor verificatie, inclusief beveiligingsreferenties, naast een uniek publiek-privaat sleutelpaar. De server bepaalt vervolgens of de gebruiker legitiem is via de CA. Bovendien moet het controleren of de gebruiker toegang heeft tot de bron. Dit mechanisme moet HTTPS gebruiken als communicatieprotocol omdat we geen beveiligd kanaal hebben om te voorkomen dat iemand de identiteit van de client steelt.

u kunt een volledige tutorial voor het genereren van beveiligingscertificaat vinden in officiële Oracle docs.

2.4. OAuth2 API Keys

Als u ooit applicaties hebt ontwikkeld die andere met andere applicaties interageren via de cloud, bijvoorbeeld facebook-integratie of twitter-authenticatie, enz. dan heb je dit al gebruikt. Ze vereisen dat u een API-sleutel en een API-geheim verstrekt om u terecht te identificeren. Deze API-sleutel en geheim zijn een aantal willekeurige gecodeerde tekenreeks die onmogelijk is om te raden.

om te begrijpen hoe het werkt, laten we aannemen dat u een Flickr (photo sharing applicatie) gebruikt en een aantal van uw foto ‘ s wilt posten met behulp van de REST API. Je bouwt het verzoek zoals gedocumenteerd in Flickr docs en verzendt het vervolgens.

bij ontvangst van het verzoek verifieert Flickr de gebruiker door de informatie van de API-sleutel te lezen met de geheime sleutel die bij de gebruiker hoort. Zodra deze validaties succesvol zijn, geeft de server het antwoord aan de client. Zo krijgen we een reactie met alle foto ‘ s die onlangs zijn geplaatst binnen Flickr.

zoals u zult merken, kunt u op deze manier eenvoudig toepassingen maken met behulp van de API van de provider. Ook, de provider zal u toelaten om te authenticeren, toegang tot openbare informatie.

als iemand geen respect begint te tonen voor overeenkomsten zoals het verzenden van junk traffic of een schending van het beleid, trekt de provider de API-sleutel in en voorkomt het misbruik van zijn API ‘ s.

REST API – Beveiligingsimplementaties

afgezien van bovenstaande concepten, zult u gewoonlijk uw RESTful API ‘ s in uw bedrijf moeten beveiligen met behulp van onderstaande methoden.

3.1. JAX-RS SecurityContext instance

de interface javax.ws.rs.core.SecurityContext biedt toegang tot beveiligingsgerelateerde informatie voor een verzoek en is zeer vergelijkbaar met javax.servlet.http.HttpServletRequest.

u krijgt toegang tot de SecurityContext door een instance te injecteren in een klasse veld, setter methode, of methodeparameter met behulp van de javax.ws.rs.core.Context annotatie, bijvoorbeeld in onderstaande code sc.isUserInRole() wordt gebruikt om de autorisatie voor de gebruiker te controleren.

3.2. Jar-RS-annotaties voor method level authorization

deze techniek wordt veel gebruikt in bedrijfstoepassingen en wordt gebruikt om rollen en verantwoordelijkheden van een geverifieerde gebruikt – voor een bepaalde operatie te verifiëren. JAX-RS geeft hiervoor onderstaande aantekeningen.

  • @PermitAll
  • @DenyAll
  • @RolesAllowed

een voorbeeld gebruik van annotatie kan zijn:

Lees verder : Jax-RS authenticatie en autorisatie voorbeeld

REST API Security Best Practices

noteer enkele belangrijke punten bij het ontwerpen van beveiliging voor uw RESTful web services.

  1. gebruik alleen het HTTPS-protocol, zodat uw hele communicatie altijd versleuteld is.
  2. verzend nooit auth-referenties of API-sleutels als query param. Ze verschijnen in URL en kunnen gemakkelijk worden geregistreerd of Bijgehouden.
  3. Gebruik altijd het hardste versleutelingsniveau. Het zal helpen om meer vertrouwen te hebben.
  4. voor bronnen die worden blootgesteld door RESTful webservices, is het belangrijk om ervoor te zorgen dat PUT -, POST-en verwijderingsverzoeken beschermd zijn tegen vervalsing van Siteverzoeken.
  5. Valideer de invoergegevens altijd zo snel mogelijk in de servermethode. Gebruik zoveel mogelijk alleen primitieve gegevens als invoerparameter.
  6. vertrouw op de validatiefuncties van het framework, aangezien deze al door een grote gemeenschap worden getest.

laat me weten wat uw gedachten en ervaringen zijn over hoe u RESTful web services in uw organisatie kunt beveiligen.

Gelukkig Leren !!

Was dit bericht nuttig?

laat ons weten of je de post leuk vond. Dat is de enige manier waarop we kunnen verbeteren.
Ja
Nee

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.

More: