Göm menyn

TDDD80 Projekt: Mobila och sociala applikationer

Laboration S4: Inloggning


Syfte

I denna laboration ska du lägga till inloggning med lösenord och användarnamn till din applikation. Applikationen ska neka vissa routes om man inte är inloggad. Så länge er lösning uppfyller spec:en nedanför, har ni fria händer att bestämma hur ni vill lösa uppgiften.

Genomförande

Första steget i laborationen är att utforska (Googla) och skriftligt förklara viktiga grundbegrepp. Det är viktigt att ni för varje svar lägger med de URL:er (länkar) som ni har bedömt vara trovärdiga och som ni har använt för att sammanställa ert svar. (Svaren lämnas in i README-fil i Gitlab, tillsammans med labb-koden):

  1. Varför är det bra att salta ett lösenord innan den hashas och lagras i en databas?
  2. Vad är det för fördelar med att använda någon form av digital signature, JWS (JSON Web Signature), eller JWT (JSON Web Token) när man ska kommunicera mellan server och klient i samband med t.ex. autentisering?
  3. Att genomföra under/efter laborationen: Redogör för det mest centrala begrepp/problem som ni har behövt googla på under arbetet med labb4 (inkludera länk(ar) till de svar som ni tyckte var mest informativa).

Laborationen genomförs i par. Ni ansvarar själva för att installera nödvändig programvara för att utveckla med Python+Flask+SQLAlchemy+PostgreSQL, samt enhetstestning med code coverage.

Uppstart

Börja med att ladda programmodulen för att kunna köra PyCharm:

  • module load prog/pycharm-professional/2022.3.1

Starta en terminal och ställ dig i er labbmapp. Skriv sedan följande:

  • source my_env/bin/activate

Starta PyCharm:

  • pycharm.sh

Notera att i denna labb är det starkt rekommenderat att ni använder bibliotek i möjligaste mån för funktioner, såsom utloggning, hashning, token-generering, etc. För exempel på bibliotek, se länkarna nedan.

Krav

För att autentisera en användare efter inloggning skickar klienten token som en HTTP Header, dvs. i header-delen av http request:et. Det som ska skickas är följande:

	Authorization: Bearer "<your token>"

Utöver kraven från laboration 1 och 2 ska du uppfylla följande:

  • Det ska finnas möjlighet att logga in med ett användarnamn och tillhörande lösenord.
  • Det ska finnas möjlighet att skapa en ny användare.
  • Lösenord ska hashas med en bra hashfunktion och salt innan det sparas.
  • Om man inte är inloggad ska servern skicka tillbaka HTTP 401 - Unauthorized när man försöker använda serverfunktioner som kräver autentisering.
  • Server secret ska hanteras på ett säkert sätt, dvs. läsas in från miljön eller från en .env-fil som inte versionshanteras.
  • Applikationen ska använda en decorator-funktion för att kolla om en användare är inloggad. (Decorator är ett sätt att tillämpa en viss beteendeförändring, t.ex. felkod om användaren inte är inloggad, på många funktioner, utan att var och en av dessa behöver skrivas om med en if-sats).
  • Det ska vara möjligt att vara inloggad som samma användare från flera enheter samtidigt.
  • En token ska ha en begränsad giltighetstid (räknat från utfärdandet). Efter att denna tid har gått ut, ska den sluta vara giltig.
  • Authorization token ska skickas i HTTP Header.

Länkar

Specifikation 1

Funktion Anrop Metod Parameter Returvärde
Logga in /user/login POST
{
  'username': 'Kalle Anka',
  'password': 'KajsaArSot'
}
{
  'token': 'SCUrFBXBWsynxMB3'
}
Skapa en användare /user POST
{
  'username': 'Kalle Anka',
  'password': 'KajsaArSot'
}
HTTP 200
Logga ut /user/logout POST HTTP 200

Specifikation 2 - Autentisering av anrop

Funktion Metod Anrop Krävs Autentisering?
Spara ett meddelande POST /messages Ja
Hämta ett meddelande GET /messages/<MessageID> Nej
Ta bort ett meddelande DELETE /messages/<MessageID> Ja
Markera som läst POST /messages/<MessageID>/read/<UserId> Ja
Hämta alla meddelanden GET /messages Nej
Hämta olästa meddelanden för användare GET /messages/unread/<UserId> Ja
Logga ut POST /user/logout Ja
Logga in POST /user/login Nej
Skapa en användare POST /user Nej

Redovisa

  1. Muntligt redovisa/demonstrera er laboration för er assistent (körning på Heroku samt tester med coverage lokalt)
  2. Ladda upp söknings-svaren inkl. länkar (i README-fil), samt er kod (alla relevanta filer för labben) (gärna kontinuerligt) till ert gitlab-repo
  3. Lägg till er assistent som Reporter på ert projekt
  4. Meddela er assistent att ni lagt upp koden genom att skicka ett mejl. Märk mejlet med TDDD80: LabbS4, och se till att det finns en länk till repot i mejlet. Skicka även med en länk till er Heroku-applikation.


Sidansvarig: Rita Kovordanyi
Senast uppdaterad: 2024-02-13