82 lines
2.0 KiB
Markdown
82 lines
2.0 KiB
Markdown
|
|
# quiXzoom Passwordless Authentication
|
||
|
|
|
||
|
|
## Översikt
|
||
|
|
|
||
|
|
Passwordless cross-device authentication mellan quiXzoom app och webb.
|
||
|
|
|
||
|
|
## Komponenter
|
||
|
|
|
||
|
|
### 1. Arkitektur
|
||
|
|
- **Fil:** `docs/auth/passwordless-architecture.md`
|
||
|
|
- **Innehåll:** Komplett arkitektur med sekvensdiagram, API-spec, databasschema, säkerhetsanalys
|
||
|
|
|
||
|
|
### 2. Backend
|
||
|
|
- **Mapp:** `iom/quixzoom-auth-service/`
|
||
|
|
- **Teknik:** FastAPI + Redis + Python
|
||
|
|
- **Endpoints:**
|
||
|
|
- `POST /v1/auth/passwordless/initiate` — Initiera inloggning
|
||
|
|
- `POST /v1/auth/passwordless/approve` — Godkänn från app
|
||
|
|
- `GET /v1/auth/passwordless/status` — Polla status
|
||
|
|
- `POST /v1/auth/passwordless/reject` — Neka
|
||
|
|
- `POST /v1/auth/passwordless/cancel` — Avbryt
|
||
|
|
|
||
|
|
### 3. Webb-frontend
|
||
|
|
- **Fil:** `quixzoom-market-pages/se/login/index.html`
|
||
|
|
- **Funktioner:**
|
||
|
|
- QR-kod för snabb inloggning
|
||
|
|
- Polling var 2:e sekund
|
||
|
|
- Deep link till appen
|
||
|
|
- Fallback till email/password
|
||
|
|
|
||
|
|
### 4. App-frontend
|
||
|
|
- **Filer:**
|
||
|
|
- `iom/quixzoom-app/src/features/auth/PasswordlessApprovalScreen.tsx`
|
||
|
|
- `iom/quixzoom-app/src/features/auth/usePasswordlessAuth.ts`
|
||
|
|
- **Funktioner:**
|
||
|
|
- Push-notifieringar
|
||
|
|
- Deep link-hantering (`quixzoom://auth/approve`)
|
||
|
|
- Godkänn/neka UI
|
||
|
|
|
||
|
|
## Flöde
|
||
|
|
|
||
|
|
1. Användare klickar "Logga in" på quixzoom.se
|
||
|
|
2. Webb visar QR-kod + deep link
|
||
|
|
3. Användare öppnar appen och skannar/godkänner
|
||
|
|
4. App skickar godkännande till backend
|
||
|
|
5. Webb pollar och får JWT-token
|
||
|
|
6. Användaren är inloggad!
|
||
|
|
|
||
|
|
## Deploy
|
||
|
|
|
||
|
|
### Backend
|
||
|
|
```bash
|
||
|
|
cd iom/quixzoom-auth-service
|
||
|
|
docker-compose up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
### Webb
|
||
|
|
```bash
|
||
|
|
aws s3 sync quixzoom-market-pages/se/login/ s3://quixzoom-landing-prod/markets/se/login/
|
||
|
|
```
|
||
|
|
|
||
|
|
### App
|
||
|
|
- Bygg och deploya via Expo EAS
|
||
|
|
- Uppdatera deep link-konfiguration i app.json
|
||
|
|
|
||
|
|
## Säkerhet
|
||
|
|
|
||
|
|
- Engångstokens (32 bytes CSPRNG)
|
||
|
|
- 15-minuters TTL på sessioner
|
||
|
|
- Rate limiting (10/min per IP)
|
||
|
|
- Device fingerprinting
|
||
|
|
- JWT med session binding
|
||
|
|
|
||
|
|
## Status
|
||
|
|
|
||
|
|
✅ Arkitektur — Klar
|
||
|
|
✅ Backend-modeller — Klar
|
||
|
|
✅ Backend-routes — Klar
|
||
|
|
✅ Webb-frontend — Klar
|
||
|
|
✅ App-frontend — Klar
|
||
|
|
⏳ Deploy — Pågår
|