I min senaste artikel om tvåfaktorsautentisering skapade jag en skärmdump som beskriver hur man använder authy-tvåfaktorsautentiseringssystemet för att enkelt förbättra inloggningssäkerheten på din webbplats. Den här gången kommer vi att titta på en annan tjänst av Duo Security, som erbjuder ett solidt säkerhets API, guider och förbyggda bibliotek som gör det otroligt enkelt att komma igång snabbt.
Precis som Authy, behöver du en applikationsserver för att implementera Duo eftersom vissa aspekter av det, särskilt de hemliga nycklarna, måste definieras på en otillgänglig plats. För denna handledning använder jag Duos ColdFusion-bibliotek, men de erbjuder även libs för:
Ur ett serverns perspektiv har de definitivt fått bra täckning.
Det första du behöver göra är att registrera ett konto. Jag kommer inte att gå igenom dessa steg eftersom det borde vara självklarande, men jag säger att det var coolt att se ett gratis alternativ tillgängligt så att jag kunde skapa denna handledning utan kostnad. Ja, Duo avgifter för deras service och ärligt är det bra. Du vill se till att en tjänst som hjälper dig att säkra din webbplats har pengar för att hålla sig i affärer för lite.
När du är registrerad, blir du uppmanad att ställa in en ny integration. Det innebär bara att du behöver konfigurera detaljerna för vad du vill säkra. Och du får se varför jag säger "vad du vill säkra" när du klickar på Integrationstyp falla ner. Duo kan du konfigurera en mängd olika säkerhetsalternativ, inte bara en webbplats.
För våra syften använder vi Web SDK"alternativ Integrationsnamn är vilket semantiskt namn du vill använda för att identifiera din webbplats med.
Efter att ha sparat den informationen presenteras en inställningssida för integrationen. Här ska du finjustera hur autentisering ska fungera och få tillgång till din integration, hemliga nycklar och API-värdnamn. Dessa är kritiska för att du framgångsrikt kan arbeta med Duo och bör inte delas.
Dessutom behöver du skapa din egen alfanumeriska applikationsnyckel med 40 tecken som inte är känd för Duo och säkerställer större kontroll över ditt konto och program. Till exempel genererade jag följande slumpmässiga nyckel för min demo-app:
gQNU4CYYu3z5YvVuBamA7ZUvQ2cbe98jjI8G6rkL
Observera att det måste vara 40 tecken långt. Annars får du ett fel när du försöker använda det.
När du tittar igenom inställningarna är de flesta självförklarande men det finns ett avsnitt som heter Politik som låter dig definiera när en användare kommer att uppmanas till tvåfaktors autentisering. Det är viktigt att välja det bästa alternativet för din app. Från min erfarenhet tenderar de flesta webbplatser att fråga sina användare om de vill gå in på den förbättrade säkerheten. Tvåfaktorer kan vara besvärliga och vissa användare vill inte använda den. För detta scenario ska jag gå med Kräver Inskrivning policy (som säkerställer att Duo-inskrivningsprocessen inte omges) och ställer in en flagga i användarens databaspost när de har valt. Detta gör att användare kan logga in med ditt vanliga autentiseringsschema utan att behöva verifieras via Duo.
I själva verket är det verkligen allt jag behövde installera i Duo-administratörspanelen för att göra tjänsten tillgänglig för min app. Så låt oss börja lägga till i någon kod.
Jag vill upprepa att du måste bygga server-sid kod för att verkligen göra detta arbete och Duo har tillhandahållit ett brett utbud av libs för dig att använda.
Koden jag skriver är CFML och jag använder sin ColdFusion-komponent som hanterar alla komplexiteter för att signera och kryptera min begäran samt att verifiera returvärdet från Duo API.
Som jag nämnde tidigare är de flesta tvåfaktoraktiveringar inloggade, vilket innebär att en användare kommer att gå till deras kontoinställningar, klicka på en länk för att aktivera tjänsten och genomföra en process för att fylla i relevant information för att få saker att fungera. Det innebär i allmänhet att tillhandahålla tjänsten ett mobilnummer och validera inställningarna baserat på ett unikt nummer som skickas antingen via SMS eller ett telefonsamtal. Duo kan erbjuda användarna antingen alternativ och ger också en egen mobilapp som kan generera lösenordet för användare via sin telefon.
Om du tittar på skärmdumpen nedan kan du se hur jag har försökt att replikera en enkel kontoskärm med en framträdande knapp under den som en åtgärd för att aktivera autentiseringen:
När användaren klickar på det görs ett samtal till Duokomponenten för att signera förfrågan via signRequest ()
metod.
För att förstå vad den här metoden gör, skulle jag vilja använda ett citat från Duo-webbplatsen:
sign_request ()
utför en HMAC-SHA1 av användarnamnet, integrationsnyckeln och ett utgångstidsstämpel med hjälp av integrationssekret nyckel som HMAC-tangenten. Genom att generera denna server-sida och efter primär autentisering är Duo säker på att användaren verkligen är behörig att fortsätta till sekundärstadiet av autentisering.
I grund och botten skapar det en krypterad förfrågan baserad på alla nycklar för integrationen, den unika 40-karaktärsverktyget du skapade och användarens unika användarnamn. Slutresultatet ser något ut så här ut:
TX | cmV5YmFuZ29AZ21haWwuY29tfERJVzJNWDNQUDVOV0wxOVk0SVJPfDEzNzE4NDk1MTc = | 2ec4457684ad00419cfa04f833f5e99f29d20935: APP | cmV5YmFuZ29AZ21haWwuY29tfERJVzJNWDNQUDVOV0wxOVk0SVJPfDEzNzE4NTI4MTc = | d53e0565ab8d632ccac40097dfedc4356dd79209
Signaturen lagras i variabeln session.sigReq
vilket är en ihållande sessionbaserad variabel som jag kan referera senare. Jag kontrollerar dess värde för att säkerställa att en giltig signatur skickades tillbaka och i så fall kan jag gå vidare till nästa sida i processen.
Signaturen överförs till Duos IFRAME som hanterar både tillägg av nya användare till tjänsten samt validering av befintliga användare. Duo erbjuder ett JavaScript-bibliotek som interagerar med IFRAME för att tillhandahålla användargränssnittet för användare. Titta på koden nedan kan vi se IFRAME, hänvisningen till Duo JS lib och metoden ringa för att initiera allt:
Metodsamtalet är rakt och tar tre alternativ:
Om du är förvirrad av detta,
, var inte. Det är bara ColdFusions sätt att ersätta en variabel med sitt värde.
Vid denna tidpunkt kommer användaren att presenteras med Duo-installationsskärmen:
Användaren måste ange ett telefonnummer och sedan välja om de vill få sin sexsiffriga validerings kod via röst eller textmeddelande. Jag försökte båda och de fungerade lika bra. Duo gör kontrollen i slutet för att säkerställa att koden som anges är giltig.
Därefter kommer användaren att presenteras med en skärm för att ladda ner Duo-mobilappen:
Det här är faktiskt en bra sak, eftersom mobilappen tillåter användaren att få en kod även om de inte har någon celltjänst.
När de väl har skrivits in får de sidan som visas nedan och frågade en gång till för att validera sig:
För all del är all denna process i Duos händer; du väntar bara på feedback.
Den återkopplingen avgör om användaren har installerats korrekt och du måste använda verifyResponse ()
metod för det.
Liksom tidigare tar det alla nyckelvariablerna och får i detta fall ett svar från Duo i form av en upplagd variabel som heter sig_response
. Jag har refererat till det som form.sig_response
eftersom det är så kallad ColdFusion ger tillgång till uppdaterade variabler.
De verifyResponse ()
Metoden tar det signerade svaret som skickas tillbaka av Duo och om allt är bra returnerar användarens användarnamn för att du ska kunna validera mot din databas. Så i mitt fall skulle jag förvänta mig att "[email protected]" skulle returneras. När jag har validerat det ställer jag in flaggan i användarens databaspost som skulle låta mig veta att de har valt tvåfaktorsautentisering.
Det är allt. Det är allt du behöver göra för att installera användare för att aktivera tvåfaktors autentisering. Låt oss nu byta till inloggningsupplevelsen.
Du kan förvänta dig något magiskt att hända härifrån, men intressant nog kan du nästan återanvända samma exakta kod som skapats för att aktivera en användare för att tillåta dem att logga in. Jag gick vidare och skapade en mycket grundläggande inloggningssida:
Sidan är bara HTML-markup. Den viktiga delen är att först bestämma om användaren har valt in och det händer när du validerar sin vanliga webbplatsinloggningsinformation. Ja, du borde fortfarande göra din normala inloggningsvalidering av användarnamn och lösenord. Duos tjänst kompletterar det, inte en ersättning.
Genom att kolla databasposten bör du kunna avgöra om de har valt in. Om de inte har det, skulle du bara verifiera dem med ditt vanliga användarnamn / lösenordskombination. Om de har så ska du ringa signRequest ()
metod, samma som vi använde vid aktivering av en ny användare:
Återigen skapar vi en krypterad signatur för att skicka till Duos API via dess IFRAME- och JavaScript-bibliotek. Det viktigaste är att i det här scenariot behöver vi bara genomdriva tvåfaktorsautentisering om användaren har anmält sig till den. Därför är det viktigt att ställa in rätt policy för integrationen. Genom att ställa min till Kräver Inskrivning och med hjälp av en databasflagga kan jag fortfarande tillåta användaren att komma åt min webbplats även om de inte har valt för tvåfaktorsautentisering. Om användaren har valt, kommer de att uppmanas att ange en Duokod för att validera sitt konto.
Att öka säkerheten för en webbplats är alltid en bra sak. Du vill se till att du skyddar dina användare så mycket som möjligt och att använda tvåfaktors autentisering är ett stort steg i rätt riktning.
Duo erbjuder en gedigen service med otrolig lätthet och flexibilitet. Medan jag bara visade dig deras webb-SDK, har de också ett mycket mer flexibelt API som ger dig mycket granulär kontroll över de flesta aspekterna av processen. Medan jag rekommenderar att du använder Web SDK, är det bra att du har den strömmen till ditt förfogande. Hat är av med Duo för att skapa en bra tjänst.