Översikt
Lösenordshantering, både privat och i webbapplikationer är väldigt viktigt! Dessa veckor tar vi ett helhetsgrepp kring detta.
Händer i veckan
Section titled “Händer i veckan”Vi jobbar på med B1 och denna dubbelvecka är tänkt att hjälpa oss fokusera på hur hantering av användare kan ske i vår webbapplikation. Hantering av användare rör sig om hur man kan registrera en användare, spara den i databasen, hasha användarens lösenord och hantera inloggning/utloggning av användaren och hur sessionen används till detta.
Föreläsningen ger oss stöd för detta.
“Stå-upp”-vlogg
Section titled ““Stå-upp”-vlogg”Tidigare års “stå-upp”-vlogg för er som vill ha en introduktion till kursveckan.
Från och med nu handlar vloggarna enbart om 1DV026. Den här inspelningen gäller kursvecka 12-13.
Längre block, mer eget arbete
Section titled “Längre block, mer eget arbete”Kursblocken blir nu längre: 12-13, 14-15, 16-19 och till sist vecka 20. Det blir mindre ny teori och mer eget arbete, men låt dig inte luras av att det bara finns en inspelning och lite att läsa. Materialet kräver en hel del eftertanke.
Access control
Section titled “Access control”Mycket på webben kan vi använda anonymt, men vill vi komma åt mer behöver vi tala om vem vi är, och applikationen behöver kontrollera att vi har rätt att komma åt det vi efterfrågar. Det är vad access control handlar om. Föreläsningen reder ut skillnaden mellan autentisering (vem är du?) och auktorisering (vad får du göra?), och visar hur man hanterar lösenord säkert: de ska sparas så att applikationen aldrig själv kan läsa dem.
Det finns alltid en diskussion om man ska bygga inloggningen själv, använda ett ramverk eller låta användaren logga in via till exempel Google, och på den svenska marknaden kanske med BankID eller Freja eID. Här bygger du den själv, eftersom det är viktigt att ha gjort det. Det här är ett område där man inte får göra fel, så passa på att göra dina misstag nu.
Framtidens inloggning är passkeys, där användaren inte har något lösenord alls. Stödet rullas ut brett, men synkningen av nycklar mellan olika plattformar är inte löst, så lösenordshanterare fortsätter att vara relevanta. Passkeys tas inte upp i den här kursen, utan i årskurs två.
Föreläsningen spelades in under pandemin. I dag skulle kursledningen tala mer om lösenfraser än om lösenord, och presentationen har uppdaterats på några punkter.
Inget exempel att kopiera
Section titled “Inget exempel att kopiera”Den vanligaste frågan är var exemplet finns som man kan kopiera in i sin CRUD-applikation. Det finns inget, och det är med avsikt. Titta på inspelningen, läs presentationen och förstå hur det fungerar, så klarar du av att implementera det själv.
CSRF och SameSite
Section titled “CSRF och SameSite”En annan vanlig fråga är vilken modul man ska använda för att skydda sig mot CSRF, som togs upp i
kursvecka 5. Tidigare lade man in en token som servern
skickade till klienten och som klienten skickade tillbaka. I dag löses det smidigare med
cookie-attributet SameSite: med SameSite=Lax skickas sessionscookien inte med förfrågningar som
kommer från andra webbplatser. Det är helt okej att förlita sig på det för CSRF-skyddet, men sätt
attributet uttryckligen, eftersom webbläsarna har olika standardvärden. Komplettera gärna med en
Content Security Policy, till exempel via Helmet.
Deadlines klockan 17.00
Section titled “Deadlines klockan 17.00”Deadlines i kursledningens kurser ligger klockan 17.00. Förutom att det inkluderar fler studenter har stödsystemen en tendens att krångla vid stora inlämningar, och då är det mycket lättare att lösa problemen på kontorstid än en fredagskväll.
Stödjande inspelningar
Section titled “Stödjande inspelningar”Access Control
Section titled “Access Control”- Introduktion
- Varför är accesskontroll viktigt?
- Olika sätt att autentisera
- Cookiebaserad autentisering
- Lösenordssäkerhet (användarperspektiv) - Johans rant.
- Lösenordssäkerhet (för server)
- Ordboksattacker (Rainbow Tables)
- Saltning
- Auktorisering på servern
- Hur hantera registrering (i Express och Mongoose)
- Användarmodellen (User Model)
- Hashning av lösenordet
- Det hashade lösenordet
- Hur hantera inloggning
- Autentisera användaren
- Hur auktorisera
- Avslutning
Läsanvisningar
Section titled “Läsanvisningar”Under läsanvisningar hittar du veckans kapitel som ska läsas i kurslitteraturen. Planera upp och dela upp läsningen under veckan.
Handledning
Section titled “Handledning”Skicka gärna in frågor på förhand via vårt formulär som du når här:
Examinationsuppgift B1
Section titled “Examinationsuppgift B1”Nu är det hög tid att ta sig an examinationsuppgift B1!
Instruktioner för uppgiften hittar du här
Studiefrågor
Section titled “Studiefrågor”Här är ett antal frågor som du kan försöka besvara och diskutera tillsammans med din Ai-kompis. Tveka inte att lyfta någon av frågorna till handledningen för att fortsätta diskussionen med lärare och studiekamrater.
Frågor att diskutera med din Ai-kompis
- Jag skall implementera hantering av användare i Express. Berätta kortfattat vilket flöde jag behöver för att implementera registrering av användare och sedan så de kan logga in och logga ut.
- Berätta mer om bcrypt och om express-session.
- Hur bygger jag upp en modellklass med lagring av användaren i MongoDB med Mongoose?
Här är en utskrift från hur det såg ut när jag diskuterade ovan frågor med min Ai-kompis Ajj.
Här följer tips till hur du kan prioritera bland kursmaterialet för att komma igång med veckan.
- Till att börja med så behöver du ha kommit igång med B1. Det innebär också att du har valt en mall för din kod, t.ex. någon av övningsuppgifterna eller någon exempeluppgift. Detta pratade vi om i förra veckan.
- Titta i B1 issues och läs igenom de krav som berör användare och hantering av lösenord. Du behöver ha en översikt av kravställningen.
- Sedan tittar du på veckans föreläsning, stanna till när de pratar om kod som behöver implementeras i B1 för att hantera användare och inloggning.
- Prova att implementera små bitar åt gången i din kod.