Bouw eens een API met WCF, deel 2: Autorisatie
This post was originally published on Coding Glamour.
Bij een API is toegangsbeperking een fijn idee, zo voorkom je dat bezoekers
je hele platform platleggen of kan je contractueel vastgestelde beperkingen
afdwingen. Standaardautorisatie zou je kunnen doen via sessies, op IP basis
of via een Key. Sessies vallen per definitie af, omdat de gemiddelde API
client helemaal geen sessie-informatie kan of wil doorsturen. Op IP basis
zou prima kunnen om het maximaal aantal requests te kunnen monitoren, maar
je kunt hiermee geen restricties op de API plaatsen. Vandaar dat we hebben
gekozen voor een systeem op basis van een key.
Database
In onze database hebben we een heel simpele structuur met een n-n relatie
tussen de Users en de Rights.
Code
We moeten nu nog wel de data uit de database op een eenvoudig toegangelijke
manier vertalen naar code. We gebruiken daar grofweg het volgende datamodel
voor:
Tijdens het laden van de gebruiker uit de database kunnen we nu handig
gebruik maken van de attributes op de properties; ongeveer als:
Controle in de service
In de service kunnen we nu een eenvoudige check doen:
Controle op het aantal requests
Nu kunnen we weliswaar verifieren of een gebruiker een bepaalde API mag
aanroepen, maar dit blokkeert niet de kans dat er vanaf een key 80.000
requests per minuut af worden gevuurd. Tijd dus om ook hier paal en perk
aan te stellen!
Memcached to the rescue!
Memcached is een distributed
cache systeem dat min of meer het hart achter funda is. We gebruiken memcached
in een totaal cluster van 20 machines, die allemaal 1 GB aan geheugen bijdragen.
Alles wat we enigszins kunnen cachen stoppen we in deze cache. Omdat we
vier webservers hebben staan vanwaar we de API serveren, gebruiken we memcached
om het aantal requests / key bij te houden. Fijn hierbij is dat er een
'increment' functie is, die de waarde van een bepaalde key met
1 verhoogd. Ideaal.
We slaan in een aparte key op wanneer we voor het laatst de counter hebben
gereset:
So far...
We hebben nu de authenticatie, het verifiëren van rechten en het
controleren van het aantal requests met een paar regels code in weten te
bakken in de service. Volgende week meer over het vertalen van Domain Entities
=> API Entities.
There are 9 comments on this article, read them on Coding Glamour.