background

API security in een microservices architectuur

19 May 2017

Monolithische VS Microservices architectuur

Jaar en dag was het de gewoonte om één grote alles omvattende applicatie te ontwikkelen. Het grote probleem hierbij is dat iedere aanpassing of nieuwe functionaliteit de stabiliteit van de gehele applicatie in gevaar kan brengen. Ook wanneer de applicatie groeit is de enige manier van schalen, de gehele infrastructuur schalen. Hier spreken we van een monolitische architectuur. Microservices aan de andere kant zijn een verzameling van kleine applicaties die elk in hun eigen omgeving draaien en die onderling communiceren in de meeste gevallen via web services of API. Het voordeel van microservices is dat ieder onderdeel los van elkaar staat en dus nieuwe functionaliteiten los van en naast elkaar kunnen ontwikkeld worden. En dat wanneer één of meerdere onderdelen moeten schalen, deze dus afzonderlijk kunnen schalen in plaats van de volledige applicatie.

Monolitische VS microservices architectuur

Gebruikers en permissies

Bij een monolitische applicatie zit het beheer van gebruikers en rechten in hetzelfde systeem als de andere functionaliteiten en is het dus gemakkelijker om toegang voor gebruikers in te stellen. Bij microservices aan de andere kant hebben de services geen notitie van wie de gebruiker is en/of wat zijn rechten en rollen zijn. Iedere microservice zal dus tegenover een centrale gebruikers web service moeten verifiëren of de huidige gebruiker de nodige rechten heeft.

JSON Web Tokens

JSON Web Tokens zijn een open standaard op basis van JSON om access tokens te genereren. JWT bevatten een JSON payload een header en een signature. Op basis van de publieke signature kan iedereen de content van de JSON payload lezen. Maar indien iemand iets zou veranderen aan de JSON payload dan kan deze niet opnieuw gesigned worden. Waardoor de server deze niet zal accepteren als een geldige token. Het is dus ook mogelijk om de rollen van de gebruiker of eventule rechten mee in de JSON payload te verzenden. Iedere microservice weet van zichzelf wat zijn nodige permissies of rollen zijn en deze kunnen ze uit de JSON Web Token lezen. Het enige dat ze dan nog moeten doen is deze token valideren tegenover de gebruikers repository.  

API Gateway

Om ieder API verzoek naar de juiste afgeschermde microservice door te verwijzen maken we gebruik van een publieke API gateway. Indien we niet willen dat de JSON payload door alle gebruikers kan gelezen worden kunnen we de API gateway API keys laten genereren en deze op onze JSON Web Tokens mappen. Zo zullen gebruikers nooit geen interne informatie zien, en kan achter de firewall de JSON Web Token met alle nodige informatie via de web services doorgegeven worden.

JSON Web Tokens