Een verbeterde 'wachtwoord herstel'-ervaring voor Sitecore gebruikers
De standaard 'wachtwoord herstel'-functionaliteit van Sitecore is erg eenvoudig en schendt het algemene beveiligingsbeleid van veel organisaties. Sitecore stuurt simpelweg een nieuw wachtwoord per e-mail naar de gebruiker. Daarnaast hebben gebruikers geen mogelijkheid om zelf een nieuw wachtwoord te kiezen. Om dit te ondervangen hebben wij een Sitecore module gebouwd die eenvoudig te installeren is op een Sitecore omgeving. De module is getest op Sitecore 8.2, 9.0 en 9.1.
'Not secure by default'
De reden voor dit gedrag is eenvoudig te verklaren. Een Sitecore-implementatie is 'not secure by default'. Er ligt dus een taak voor de ontwikkelaars om de omgeving goed te beveiligen. Gelukkig kun je (bijna) alle functionaliteiten van Sitecore aanpassen door middel van configuratie wijzigingen of door de 'pipelines' van Sitecore aan te passen.
Een ‘pipeline’ bestaat uit een reeks processoren die een bepaald stuk code uitvoert. Wanneer een ‘pipeline’ wordt aangeroepen, worden de processoren op volgorde uitgevoerd. ‘Pipelines’ worden binnen Sitecore gebruikt om bestaande functionaliteit aan te passen en/of uit te breiden.
De beveiliging van de Sitecore login pagina kan verbeterd worden op de volgende manieren:
- De login pagina alleen beschikbaar maken voor SSL requests
- De 'auto complete'-feature voor gebruikersnamen uitzetten
- De 'Remember Last Logged In User Name' setting uitzetten
Meer informatie vind je hier.Â
Daarnaast kun je het wachtwoordbeleid versterken middels de configuratie. Dit wordt ook door Sitecore aanbevolen om te doen. Sitecore maakt gebruik van de Microsoft ASP.NET Membership Provider. In de web.config kun je in de sectie <membership defaultprovider="sitecore"> de volgende eigenschappen configureren:
- minRequiredPasswordLength
- minRequiredNonAlphanumericCharacters
- maxInvalidPasswordAttempts
- passwordAttemptWindow passwordStrengthRegularExpression
De Password Recovery module
Met bovenstaande aanpassingen hebben we echter nog niet het issue getackeld waarmee we het verhaal begonnen: dat Sitecore een nieuw wachtwoord via de mail naar een gebruiker stuurt. Hier hebben wij de Password Recovery Module voor ontwikkeld die je eenvoudig kunt installeren op een Sitecore omgeving. Met deze module kunnen Sitecore administrators het wachtwoordbeleid volledig beheren binnen de Content Editor van Sitecore en zijn zij niet afhankelijk van ontwikkelaars. Daarnaast krijgen Sitecore gebruikers die hun wachtwoord vergeten zijn de mogelijkheid om zelf een nieuw wachtwoord in te stellen.
Hoe werkt de module?
Om dit te realiseren moet er worden ingegrepen op de Sitecore ‘pipeline’ die verantwoordelijk is voor de wachtwoord herstel-functionaliteit. Deze ‘pipeline’ bestaat out-of-the-box uit de volgende processoren:
- VerifyUsername – Er wordt gecontroleerd of er gebruiker met de opgegeven gebruikersnaam bestaat en of er een emailadres voor deze gebruiker is ingesteld.
- GeneratePassword – Het huidige wachtwoord van de gebruiker wordt gewist en vervangen voor een willekeurig gegenereerd wachtwoord.
- PopulateMail – De email die verstuurd gaat worden wordt voorzien van inhoud op basis van de waarden die ingevuld zijn op het item /sitecore/system/Settings/Security/Password recovery/Password Recovery Email in the core database.
- SendPasswordRecoveryMail – De email wordt naar de gebruiker verstuurd.
In plaats van een email met een nieuw wachtwoord willen wij dat de gebruiker een email met een wachtwoord reset-link ontvangt. Na het klikken op deze link moet de gebruiker worden doorgestuurd naar een pagina waar hij zelf een nieuw wachtwoord kan instellen. De tweede en derde processor uit de 'pipeline' moeten dus worden vervangen.
De ‘GeneratePassword’-processor wordt vervangen door een processor die een willekeurige token genereert en deze waarde opslaat op het betreffende Sitecore user profile. Tevens worden de datum en tijd van het aanvragen van een nieuw wachtwoord opgeslagen op het 'user profile' binnen Sitecore. Het 'user profile' wordt hier voor uitgebreid met twee custom velden:
- Password recovery token
- DateTime of password recovery request
De token en het tijdsveld worden op een later moment gebruikt om te kunnen valideren.
De ‘SendPasswordRecoveryMail’-processor wordt vervangen door de ‘PopulatePasswordRecoverMail’-processor. Deze processor bouwt een wachtwoord reset link op en haalt de overige content voor de email van het item /sitecore/system/Modules/Password Recovery/Password Recovery Settings.
Zoals eerder gezegd, is het wachtwoordbeleid te beheren via de Content Editor. Binnen de sectie ‘Password Settings’ op het item /sitecore/system/Modules/Password Recovery/Password Recovery Settings kun je waarden invullen voor de volgende velden:
- Minimale lengte van het wachtwoord
- Minimum aantal niet-alfanumerieke karakters
- Minimum aantal hoofdletters
- Minimum aantal kleine letters
- Minimum aantal numerieke karakters
Binnen de sectie ‘Email Settings’ kun je aangeven hoeveel uur de token geldig is. Met andere woorden: hoeveel uur na aanvragen van een nieuw wachtwoord is de wachtwoord reset link uit de email te gebruiken.
De nieuwe, verbeterde ervaring voor de gebruiker
Wanneer de gebruiker op de reset-link in de email heeft geklikt, wordt hij doorgestuurd naar een wachtwoordherstelpagina. Deze pagina kun je volledig aanpassen aan de huisstijl van de organisatie. De gebruiker kan alleen een nieuw wachtwoord invoeren als de token in de reset link geldig is. Dit is het geval als de token overeenkomt met de token op het user profile én er niet meer tijd is verstreken tussen de aanvraag van een nieuw wachtwoord en het klikken op de reset link. Is dit niet het geval, dan zal er een foutmelding worden getoond aan de gebruiker.
Op de wachtwoordherstelpagina moet de gebruiker het nieuwe wachtwoord tweemaal invoeren. Het wachtwoord moet (uiteraard) voldoen aan het wachtwoordbeleid zoals deze in Sitecore is ingesteld. Door middel van JavaScript wordt gecontroleerd of de invoer van beide wachtwoorden gelijk is. Indien dit niet het geval is, krijgt de gebruiker een melding te zien.
Nadat de gebruiker het nieuwe wachtwoord heeft opgeslagen, wordt het wachtwoord gewijzigd in Sitecore. Het veld 'Password recovery token' op het user profile wordt gewist, omdat deze waarde niet langer nodig is. De waarde van het veld 'DateTime of password recovery request' wordt niet gewist, omdat het voor de administratie nuttig kan zijn om te weten wanneer een gebruiker een wachtwoordherstelverzoek heeft gedaan.
De gebruiker krijgt tenslotte een succes scherm te zien. Ook deze is volledig naar wens te 'stylen'. Op het inlogscherm van Sitecore kan de gebruiker vervolgens inloggen met zijn nieuwe wachtwoord.
Wil je meer informatie of hulp bij het installeren van de module, neem dan gerust contact met ons op. Ons Sitecore team helpt je graag!
Download hier de module. De code van de module is tevens beschikbaar op GitHub.
Geïnspireerd op een blogpost van Anders Laub Christoffersen: https://laubplusco.net/securing-password-recovery-experience-sitecore-8/.