Open nevbe opened 1 year ago
if (params["username"] != null) {
//Add auth header if username is provided
params["Bearer"] =
base64Encode("${params["username"]}:${params["password"]}".codeUnits);
} else if (params["email"] != null) {
//Add auth header if email is provided
params["Bearer"] =
base64Encode("${params["email"]}:${params["password"]}".codeUnits);
} else {
return null; //TODO: ERR?
}
login använde inte param["Bearer"]. Bara username eller email, och lösenord. Och totp om användaren hade aktiverat 2FA. Men eftersom vi ska ha massa tredjepartsinlogg också kommer vi att köra auth0.com. Se https://pub.dev/packages/auth0.
Det är en helt extern tjänst med eget login-UI som helt enkelt returnerar en respons som ser ut i stil med:
{
"access_token": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiaXNzIjoiaHR0cHM6Ly9wZXRlcnBhbmR1cm8uZXUuYXV0aDAuY29tLyJ9..CmDZXR65lbkMTt6R.u6niz3rsMj17HKVX5LQUDdRx7qVh3ii-owI-P3a0ZUAl3aY3Z1c_lDnlLCVDpT3h1Z0Eg3sySjpBbtljWKdul1sG5hst8gtVNeNngP_wdJ_7H6JobGSSmon8lKGBSIl0gc3GmeMKWC84VcIPFyLWDnMYZANAnq8HOVAlbRvwOjxPI9oXjj6M1guTn68f73BH6pVAjlq6Xeq5aYpOWR6PnONaa3SQUtI7RoSt1b7MVCpySaCmYlh2C6vxeYB83-Zk97afpY5UD6RiVbPlrvcDFYghzRcR7CEcPyG7lmPzk-Mk6bZMB1lIR_1v4sYLiz9RQ0g.06UClW3nylNqsRiRNZDGPw",
"id_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Im9lc1lEX09WQ2JXQWJuS3lMRk5xRyJ9.eyJuaWNrbmFtZSI6InRlc3QiLCJuYW1lIjoidGVzdEB0ZXN0LnNlIiwicGljdHVyZSI6Imh0dHBzOi8vcy5ncmF2YXRhci5jb20vYXZhdGFyL2JmNTFmZDA0MjE1MGQxNWM2OTU4NDI0MmExYWE0Y2VjP3M9NDgwJnI9cGcmZD1odHRwcyUzQSUyRiUyRmNkbi5hdXRoMC5jb20lMkZhdmF0YXJzJTJGdGUucG5nIiwidXBkYXRlZF9hdCI6IjIwMjItMTItMzBUMTE6NTg6NTguNjE4WiIsImVtYWlsIjoidGVzdEB0ZXN0LnNlIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJpc3MiOiJodHRwczovL3BldGVycGFuZHVyby5ldS5hdXRoMC5jb20vIiwic3ViIjoiYXV0aDB8NjNhZWQyNDQxM2U5YzM2MGMyYjRkZWZhIiwiYXVkIjoibk5laTF1TUpObHVMc215NkJXdm80ZVRhYVRIbmN6QjkiLCJpYXQiOjE2NzI0MDc5MDQsImV4cCI6MTY3MjQ0MzkwNCwic2lkIjoiRVNXb2lDYm9CeHBOVmRfMXFkanYzTXNvZk80YXJINXIiLCJub25jZSI6IkxtWk9iWEI1UnkxQlZGSklPVVZCZm13eFoyZzVWVm8zTkRSMFEzbGhSMlpwTG1sbVQwUTNaRGxIYmc9PSJ9.hCCo0RVa6YwRKK0Aleqv9vDl7ygbn8UQQXXYWRYD7aG4TiHsv4qODT31voSmHXjoS7v5LMJorXj8XyW1O0dHo6mqTmCFe4Cs_BM1jtSikNWIVAGPsvlIOa5C5vagvFAwKaxGYF4qmv2GKxQLz_fla9TlL6J72ZzwLXB8cSn89u3rVpdHCcZH0luFhir1dXuMthbxMmba-ixnyOldl6wHM_3fm2-1P19Kx-8eip5AP8Vg6TVK4REGIYxMKc2yvUIobbTQa4Ye_Fz227gzprB9RW0O_KFNLdkMnATPNmXE_KeTY8ZSVNIUmAKSgO5vMuUeGOKckW3_SbqxBUrbVIrRQA",
"scope": "openid profile email",
"expires_in": 86400,
"token_type": "Bearer"
}
I övrigt verkar det se ut att stämma ganska bra. Kan inte hitta något uppenbart fel. Jag håller på att räta ut lite frågetecken kring hur vi ska hantera Auth0:s tokens. Men en sak är säker. Någon av dem kommer att skickas som Authorization Bearer token i alla requests.
Så man skickar användarinfo i klartext via auth0 till apin så sköter auth0 kryptering och dyl samt så får man en bearer token tillbaka vid successful login?
Hur används sedan användarens bearer token? Tänker man sparar username och dylikt i cache mha Shared Preferences, sparar man även då undan den för att använda när man gör get/post-requests för typ posts och sådant?
När man använder auth0 så skickas ingenting i klartext. Användaren får en helt unik login på en domän som kontrolleras av Auth0 som antingen sparar kontot i en databas, eller accessar infon från typ Google/Facebook/etc. som sedan skickas tillbaka till appen i form av id_token.
Och sedan är det så att ingenting skickas i klartext med HTTPS, vilket i teorin är vad vi skulle använda om detta var ett system som skulle deployas skarpt, vilket är orsaken till att vi inte base64-encodade någonting i förra implementationen.
Du får väl avgöra vilken information som är rimlig att spara i Shared Preferences. Är det data som är värd att ha lokalt för easy access, eller är det data som är viktigare med "one source of truth" genom att alltid hämta datan från API:t. (Vad händer exempelvis om användaren är inloggad på en mobilapp, men byter användarnamn i webbläsaren).
Använder man auth0 tror jag dessutom att det finns ännu mindre orsak att spara saker i Shared Preferences
Ah okej så både login och registrering blir egentligen bara en redirect till auth0 som sedan gör en callback med response som innehåller info när det är klart? Det låter ju faktiskt mycket mer rimligt
Eller ja man skapar en client connection med paketet som sköter detta åt en
Jag har precis implementerat en session handler för att hantera inloggningar samt kommunicera med databasen för logins och dyl.
Jag pastear hur filen ser ut just nu nedan, samt så finns source filen här
Koden när detta skrevs
Egentligen är det ju hur post requests görs som är det viktiga, men kan va bra att ha en överblick på hela filen för att förstå sammanhanget.