48ea61cdcc
- Product documentation in docs/products/ - Updated MEMORY.md with product info - quiXzoom Auth Core as AAMOS Identity product
3.6 KiB
3.6 KiB
quiXzoom SSO Authentication Service
Microsoft-like single sign-on för alla quixzoom-egendomar.
Arkitektur
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ quixzoom.com │ │ app.quixzoom │ │ quixzoom.se │
│ (landing) │ │ (app/web) │ │ (marknad) │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌─────────────▼─────────────┐
│ auth.quixzoom.com │
│ (SSO / JWT / Cookies) │
└─────────────┬─────────────┘
│
┌─────────────▼─────────────┐
│ Redis (sessions) │
└───────────────────────────┘
Flöde
Inloggad i appen → Automatiskt inloggad på webb
- Användare loggar in i quiXzoom-appen
- Appen får JWT access token + refresh token
- Cookies sätts på
.quixzoom.com(shared across subdomains) - Användare besöker
www.quixzoom.com/mina-sidor - Webbsidan kollar
qz_access_tokencookie - Token är giltig → användare är inloggad utan att göra något
Cross-domain cookie-sharing
Cookie: qz_access_token=xxx
Domain: .quixzoom.com
Path: /
Secure: true
SameSite: lax
HttpOnly: true
Detta gör att cookien skickas med till:
www.quixzoom.comapp.quixzoom.comquixzoom.sequixzoom.de- etc.
Endpoints
| Endpoint | Beskrivning |
|---|---|
POST /auth/login |
E-post + lösenord, sätter cookies |
POST /auth/refresh |
Förnya access token |
POST /auth/logout |
Logga ut, rensa cookies |
GET /auth/me |
Hämta inloggad användare |
GET /auth/check |
Snabb auth-check (200/401) |
GET /auth/.well-known/jwks.json |
Publik nyckel för verifiering |
Användning
Webb (JavaScript)
import { quixzoomAuth } from './sso-client.js';
// Kolla om inloggad
const user = await quixzoomAuth.getUser();
if (user) {
console.log('Inloggad som:', user.email);
}
// Logga in
await quixzoomAuth.login('user@example.com', 'password');
// Logga ut
await quixzoomAuth.logout();
React Native / App
// Samma client, men skickar tokens i Authorization-header
const response = await fetch('https://api.quixzoom.com/missions', {
headers: {
'Authorization': `Bearer ${accessToken}`
}
});
Driftsättning
docker-compose up -d
Miljövariabler
| Variabel | Default | Beskrivning |
|---|---|---|
PORT |
8080 | Server port |
REDIS_HOST |
localhost | Redis server |
JWT_PRIVATE_KEY_PATH |
- | Sökväg till privat nyckel |
JWT_PUBLIC_KEY_PATH |
- | Sökväg till publik nyckel |
Säkerhet
- RS256-signerade JWT-tokens
- HttpOnly cookies (skyddade mot XSS)
- Secure flag (endast HTTPS)
- SameSite=lax (CSRF-skydd)
- Refresh token-rotation
- Token-blacklisting vid utloggning