Beveilig je API's met API Security van SURFconext

Er zijn veel mobiele apps die gegevens uit API's nodig hebben om de juiste informatie te tonen, denk aan studentenapps met roosterinformatie, studievoortgangdossiers, cijferoverzichten enzovoort. Om toegang van de app tot die gegevens veilig te regelen, kun je gebruik maken van OpenID Connect via SURFconext. Met API Security, een onderdeel daarvan, kunnen instellingen nu ook hun eigen API's afschermen, zodat je geen eigen OpenID Connect-gateway meer hoeft te hebben. Lees hoe dat in zijn werk gaat.

Ik spreek in dit artikel over API's. In de technische context van het OpenID Connect-protocol worden dit resource servers genoemd. API is een meer gangbare naam, vandaar dat ik die term verder in dit artikel gebruik.

Veilig toegang tot gevoelige gegevens

Stel je hebt een mobiele app voor studenten gebouwd. Zo’n handige app waarmee studenten hun rooster kunnen raadplegen, hun cijfers kunnen inzien en beschikbaarheid van studieruimtes kunnen checken. Die app moet verschillende API's kunnen raadplegen, zoals het SIS en de roosterapplicatie.

Sommige API's bevatten openbare gegevens, maar andere bevatten gegevens die niet voor iedereen zichtbaar mogen zijn. Voor die gegevens is het belangrijk dat de eigenaar van API heel zorgvuldig bepaalt aan welke gebruiker de API toegang geeft tot welke gegevens. De app en de API's waarmee de app communiceert moeten dus ook veilig en betrouwbaar kunnen vaststellen wie de gebruiker is.

Via SURFconext kun je voor webdiensten veilig en betrouwbaar vaststellen wie de gebruiker is die op dat moment gebruik maakt van je dienst. Maar bij API’s werkt dit anders: een API wordt bevraagd door een ander stukje software (machine-to-machine) dus “praat” niet rechtstreeks met de gebruiker. Voor dit proces maken we daarom gebruik van SURFconext in combinatie met het OpenID Connect-protocol.

Betrouwbaar vaststellen wie de gebruiker is

Het begint uiteraard met de student die inlogt op de app. Ook daarvoor gebruiken we OpenID Connect. Hoe het inlogproces verloopt, lees je in de blogpost OpenID Connect for Dummies. We gaan er in deze blogpost vanuit dat de student al is ingelogd in de app (via SURFconext).

Nu wil hij natuurlijk gegevens bekijken die voor hem relevant zijn. We willen voorkomen dat hij de cijfers van een medestudent kan inzien, dus we moeten zorgen dat de app alleen die gegevens opvraagt bij de API die de student mág zien. Dat proces wordt afgehandeld door de OpenID Connect-functionaliteit die SURFconext biedt. Ik ga daar nu verder op in.

Hieronder zie je hoe de mobiele app aan de API namens de gebruiker een verzoek doet om gegevens, en hoe de API betrouwbaar vaststelt wie de gebruiker is.

SURF Flow Gegevens opvragen bij een API die met OIDC is beveiligd
  1. Bij het inlogproces van de student heeft de Relying Party (RP, in dit geval: de studentenapp) een access token gekregen van de OpenID Connect gateway (OIDC-gateway, in dit geval: SURFconext,  waarmee de student toegang heeft gekregen tot de app.

  2. De RP stuurt een verzoek naar de API (de resource server, in dit geval: de bron met cijferinformatie), met daarin het access token van de student. 

  3. De API controleert de geldigheid van het access token door het op te sturen naar de OIDC-gateway. Dit proces wordt introspectie genoemd.

  4. Als het token geldig is, geeft de OIDC-gateway de gegevens aan de API waarmee deze de student kan identificeren.

  5. De API haalt de gevraagde cijfers op en stelt een antwoord op voor de RP.

  6. De RP ontvangt de cijfers van de student.

Geen eigen OIDC-gateway meer nodig

Gekoppeld aan de door SURFconext geleverde identiteit kan de API in dit proces de gebruiker authenticeren, zonder interactie met de gebruiker. Wilde je dit inrichten voor je eigen applicatie, dan moest je tot op heden hiervoor je eigen OIDC-gateway inrichten, om bijvoorbeeld de koppeling te kunnen maken tussen access tokens en identiteiten. Dat is niet langer nodig nu SURFconext ook deze functionaliteit levert, onder de naam: API Security. SURFconext biedt al geruime tijd ondersteuning voor het aansluiten van webdiensten via OIDC.

Nu is het ook mogelijk om naar SURFconext autorisatieverzoeken te (laten) sturen vanuit verschillende API's. Zo hoef je niet (langer) zelf een OIDC-gateway te beheren en kun je gebruikmaken van de (management) tools van SURFconext, zoals het IdP en SP Dashboard. Verder gebeurt dit alles op basis van open standaarden, zodat integratie in je applicatie en API eenvoudig zou moeten verlopen.

Registratie bij SURFconext zorgt ervoor dat je alles op één plek kunt beheren. Dat werkt als volgt:

  • Als instelling meld je de API's aan bij SURFconext, zodat je API's bij SURFconext terechtkunnen voor de autorisatie van gebruikers die gegevens willen ophalen bij de API's.
  • Je geeft voor elke RP die je beheert, op welke API's die moet kunnen bevragen. Zo voorkomen we dat een andere RP gegevens kan opvragen bij een API waar deze helemaal geen toegang toe heeft.

Meer weten?

Heb je belangstelling voor API Security van SURFconext? Neem dan contact op met mij via bart.geesink@surfnet.nl

Author

Ik ben technisch product manager bij SURFconext en bij SURFmailfilter.

Bart Geesink

Comments

Dit artikel heeft 0 reacties