Security op basis van Active Directory Authentication Library

​Recentelijk zijn we binnen Delta-N gestart met een upgrade van onze timesheet applicatie naar een volledig op Cloud technologie gebaseerde oplossing. Deze applicatie moet een moderne user interface hebben en in diverse verschijningsvormen (website; apps) op meerdere platformen voor onze medewerkers beschikbaar zijn.

Optimale Security is een belangrijke gestelde eis aan de nieuwe applicatie. De toepassing bestaat uit verschillende onderdelen die afzonderlijk op Microsoft Azure worden gehost. Het is daarom van belang dat authenticatie en autorisatie in elk van deze onderdelen gevalideerd worden. Daarnaast wordt de applicatie als een multi-tenant oplossing beschikbaar gesteld aan klanten van Delta-N. Het dient daarom mogelijk te zijn gebruik te maken van meerdere identity providers.

Initiële oplossingsrichting

Voor de website hebben we gekozen om een Single Page App (SPA) met behulp van AngularJS te bouwen. Om Single Sign-On (SSO) te realiseren, werd in het verleden vaak gekozen voor Active Directory Federation Services (ADFS). Aangezien Delta-N gebruikt maakt van Azure Active Directory was er in dit geval een eenvoudiger alternatief voor de ADFS oplossing.

Active Directory Authentication Library

Om de integratie met Azure Active Directory te vereenvoudigen, heeft Microsoft de Active Directory Authentication Library (ADAL) beschikbaar gesteld. ADAL wordt niet alleen als binaries opgeleverd maar is als open source oplossing ook beschikbaar op GitHub.
ADAL biedt een abstractie laag over de vrij ingewikkelde ‘authentication flow’ die plaats vindt tussen (web) applicatie en identity provider. Nadat een gebruiker zich in de web applicatie succesvol heeft geauthentiseerd tegen de Azure Active Directory, ontvangt de web applicatie een access token. Dit token wordt vervolgens gebruikt in de communicatie met de onderliggende MVC Web Api backend.
ADAL neemt het aanvragen-, verversen- en opslaan (browser cache) van tokens volledig voor zijn rekening. De ontwikkelaar hoeft hier geen eigen code voor te schrijven.
D.m.v. configuratie hebben we er in de Web Api backend voor gezorgd dat de tokens tegen de Azure Active Directory gevalideerd worden.
ADAL is beschikbaar voor verschillende platformen zoals: .NET, AngularJS, JavaScript, Cordova en Xamarin. Integratie met Azure Active Directory is dus vanaf ieder platform eenvoudig geworden!

Azure Active Directory 

Conclusie

Sinds februari 2015 is ADAL.JS beschikbaar waarbij met een minimale hoeveelheid code en configuratie de gehele security inrichting gerealiseerd kan worden.
Aangezien er veel impliciete functionaliteit aanwezig is heeft ons dit, buiten de leercurve, veel programmeertijd bespaard. Aangezien er verschillende libraries beschikbaar zijn, is er een uitstekende integratie met AngularJS waarbij elk https request, automatisch secure is geworden.
Een andere handige feature is dat de WEB-API zelfstandig de tokens kan valideren op basis van een set aan ontvangen meta-data van AAD. Het is dus niet meer nodig om bij elke call een verbinding met AAD op te zetten om tokens te valideren.
Tot slot, door te kiezen voor ADAL beperk je je wel tot 1 type identity provider (AAD), dit kan nadelig zijn voor het multi-tenancy principe van de oplossing. Maar deze keuze zal zeker opwegen tegen het gemak en de mate van security die je hiermee kan bereiken.

Delta-N Development Team