django-hidp: een compleet authenticatiesysteem voor Django-ontwikkelaars

Bij het ontwikkelen van Django-applicaties wordt authenticatie vaak een complexe puzzel van meerdere libraries, maatwerkoplossingen en beveiligingskeuzes. Bij Leukeleu hebben we deze puzzel al talloze keren opgelost voor onze klanten, en daarom vonden we het tijd om een definitieve oplossing te maken waarvan niet alleen wij, maar ook de Django community kan profiteren.

Het probleem dat we oplossen


(Bijna) elke Django-applicatie heeft authenticatie nodig, maar het huidige ecosysteem vereist dat er verschillende oplossingen gecombineerd moeten worden. Je begint wellicht met Django’s ingebouwde authenticatie, voegt django-allauth toe voor sociale logins, integreert django-otp voor tweefactorauthenticatie, implementeert rate-limiting met django-ratelimit, en besteedt vervolgens (veel) tijd aan het veilig laten samenwerken van al deze componenten.

Deze gefragmenteerde aanpak brengt verschillende problemen met zich mee. Onderhoud en updates van meerdere afhankelijkheden binnen projecten worden een voortdurende last. En het helpt ook niet mee als het op meerdere plekken in meerdere projecten soms nét iets anders toegepast wordt.

Onze oplossing: django-hidp (Hello, ID Please)

django-hidp toont onze inzet voor privacy-by-design en standaardisatie. Maar in plaats van nóg een minimaal authenticatiepakket te ontwikkelen, hebben we een uitgebreide (maar compacte) totaaloplossing gecreëerd die tegemoetkomt aan de complete authenticatiebehoefte van een moderne Django-applicatie. De kernfilosofie van django-hidp is het bieden van een volledige, veilige authenticatieomgeving volgens de OWASP-best practices, terwijl het flexibel genoeg is om zich aan te passen aan specifieke projectvereisten. We hebben onze ervaringen met tientallen klantprojecten verwerkt tot één solide pakket.

Belangrijkste functionaliteiten


Volledige authenticatieflow: django-hidp verzorgt de complete authenticatie-cyclus, van registratie met e-mailverificatie tot het herstellen van wachtwoorden. Het systeem biedt slimme standaardinstellingen met ruimte voor maatwerk waar nodig.

Eenvoudige integratie: Een doordachte set aan templates zorgt out-of-the-box voor een nette frontend met duidelijke (vertaalde) teksten, en een uiterlijk dat eenvoudig aangepast kan worden aan je applicatie.

OpenID integratie: Moderne applicaties moeten kunnen koppelen met externe identity-providers zoals Google, Microsoft en bedrijfsoplossingen. django-hidp biedt ingebouwde OIDC-ondersteuning die integraties sterk vereenvoudigt.

Flexibele tweefactorauthenticatie: Gebouwd op django-otp ondersteunt django-hidp diverse OTP-methoden zoals TOTP en back-upcodes, inclusief configureerbare beleidsregels voor verschillende beveiligingsniveaus.

Standalone OIDC-provider: Voor organisaties met meerdere applicaties kan django-hidp zelf als OIDC-provider functioneren, waardoor single sign-on binnen je applicatie-ecosysteem mogelijk wordt zonder externe diensten.

Standaard beveiliging: Rate limiting beschermt automatisch tegen brute-force-aanvallen. Ingebouwde ondersteuning voor Content Security Policy helpt aanvallen zoals cross-site scripting voorkomen. Het systeem volgt OWASP-richtlijnen en bevat beveiligingsmaatregelen die vaak over het hoofd worden gezien in maatwerkimplementaties.

Minimale Dependencies, Maximale Functionaliteit

Het project django-hidp is ontworpen met een minimale maar doordachte set aan dependencies, passend bij het doel: veilige, moderne authenticatie met ondersteuning voor OIDC, MFA en QR-codes. Hier volgt een overzicht van de gebruikte packages, gegroepeerd per functioneel domein:

Basisfunctionaliteit

Deze vormen de kern van het authenticatieproces:

  • jwcrypto voor het signen en verifiëren van JWTs — essentieel bij OIDC flows en OAuth2.
  • requests voor communicatie met externe identity providers (zoals token endpoint calls).
  • django-ratelimit om brute-force aanvallen tegen te gaan, met per-IP of per-username throttling.

MFA / OTP

Multifactor-authenticatie is optioneel, maar wordt ondersteund voor sterke authenticatie:

  • django-otp biedt integratie van One-Time Password authenticatie in Django. Flexibel en uitbreidbaar.
  • segno voor het genereren van QR-codes waarmee gebruikers hun authenticator-apps kunnen instellen.

OIDC / OAuth2

Voor federatieve authenticatie en het aanbieden van een eigen Identity Provider:

  • django-oauth-toolkit als de-facto standaard voor OAuth2 ondersteuning in Django, waarop django-hidp voortbouwt.
  • djangorestframework is nodig voor de REST API endpoints (zoals userinfo), inclusief serialisatie en permissions.

Huidige status en eerste stappen

django-hidp zit momenteel in een soft-launchfase. De kernfunctionaliteit is klaar voor productie en actief in gebruik in meerdere projecten, maar documentatie en uitgebreide voorbeelden worden de komende tijd nog verder aangescherpt. Documentatie vind je op: https://leukeleu.github.io/django-hidp/.

Bijdragen en samenwerking

Of je nu code wilt bijdragen, documentatie wilt verbeteren, of het pakket in jouw projecten wilt testen: alle betrokkenheid die veiligheid en privacy centraal stellen wordt zeer gewaardeerd!