Files
boc/memory/auth-integration-result.md
T
Bernt bae705aa97 ARCHITECTURE: NFC roadmap, edge AI, audit logging
- Add NFC ePassport roadmap (ICAO 9303, eIDAS)
- Add TensorFlow.js edge face detection (BlazeFace)
- Add structured audit logger (GDPR-compliant)
- Risk scoring support

Part of KYC Apple Native UX v1.1.0
2026-06-29 16:24:48 +00:00

123 lines
4.7 KiB
Markdown

# Auth Integration Result: aamos-ledger ↔ ouroboros-identity (RS256)
**Date:** 2026-06-05
**Status:** ✅ KOMPLETT — Alla tester godkända
---
## Sammanfattning
RS256-integration mellan `ouroboros-identity` (port 3207) och `aamos-ledger` (port 3250) är nu aktiv.
---
## Vad som gjordes
### Viktigt fynd
Port 3207 kördes av en **Rust-binär** (`/home/bernt/bin/ouroboros-identity`), inte Node.js-versionen som låg i `/opt/amos/services/ouroboros-identity/index.mjs`. Rust-källkoden finns i `/home/bernt/rust/ouroboros-identity/`.
### Steg 1: ouroboros-identity Rust-binär — RS256 signing
**Fil:** `/home/bernt/rust/ouroboros-identity/src/main.rs`
Ändringar:
- Importerade `decode`, `Algorithm`, `DecodingKey`, `Validation` från `jsonwebtoken`
- Lade till `priv_key_pem: Option<String>` och `pub_key_pem: Option<String>` i `AppState`
- Lade till `org_id: Option<String>` och `roles: Option<Vec<String>>` i `Claims`-struct
- Ny funktion `issue_jwt_full()` som signerar med RS256 när privat nyckel finns, annars HS256
- `TokenBody` utökad med `org_id` (default: `wavult-group`) och `roles` (default: `["admin"]`)
- `issue_token` handler använder nu `issue_jwt_full` och inkluderar `algorithm` i svaret
- Ny `/api/auth/validate` POST-endpoint som verifierar token med pubkey RS256 (eller HS256 fallback)
- `main()` laddar nycklarna från `/opt/amos/data/keys/` vid startup
**Nycklar laddas från:**
- Private key: `/opt/amos/data/keys/jwt-private.pem`
- Public key: `/opt/amos/data/keys/jwt-public.pem`
### Steg 2: Binär bygd och driftsatt
```bash
su - bernt -c 'cd /home/bernt/rust/ouroboros-identity && cargo build --release'
pkill -f ouroboros-identity
cp target/release/ouroboros-identity /home/bernt/bin/ouroboros-identity
systemctl restart ouroboros-identity
```
### Steg 3: aamos-ledger auth.mjs
Redan korrekt konfigurerad — läser `/opt/amos/data/keys/jwt-public.pem` och verifierar RS256. ✓
### Steg 4: /api/auth/validate i aamos-ledger
**Fil:** `/opt/amos/services/aamos-ledger/index.mjs`
- Lade till `import jwt from 'jsonwebtoken'`
- Ny GET-endpoint `/api/auth/validate?token=xxx` (unauthenticated)
- Verifierar med pubkey RS256 om den finns, annars HS256 fallback
- Svar: `{ok: true, claims: {...}}` eller `{ok: false, error: "..."}`
### Steg 5: Node.js-versionen av identity (oautentiseringsbar backup)
**Fil:** `/opt/amos/services/ouroboros-identity/index.mjs`
- Patchades även (RS256 + validate endpoint) men används inte i produktion (Rust-versionen är aktiv)
---
## Test-resultat (end-to-end)
```
=== Step 1: Get token from identity (RS256) ===
Algorithm: RS256
JWT header: {"alg":"RS256","typ":"JWT"}
=== Step 2: Use token against ledger ===
Ledger response: {"ok":true,"periods":[...]} ← 200 OK, ej 401
=== Step 3: Validate token via identity ===
Validate response: {"ok":true,"claims":{
"sub":"erik@wavult.com",
"org_id":"wavult-group",
"roles":["admin"],
...
}}
=== Ledger /api/auth/validate GET ===
{"ok": true, "claims": {"sub": "erik@wavult.com", "org_id": "wavult-group", "roles": ["admin"], ...}}
=== Invalid token test ===
{"ok": false, "error": "invalid token"}
```
**✅ TOKEN från identity accepteras av ledger utan 401**
**✅ /api/auth/validate returnerar claims korrekt (identity)**
**✅ /api/auth/validate returnerar claims korrekt (ledger)**
**✅ Felaktig token ger 401 med tydligt felmeddelande**
---
## Arkitektur
```
RS256 private key sign
┌──────────────────────┐
Client ──────────▶ │ ouroboros-identity │ :3207 (Rust)
│ POST /api/auth/token │
│ POST /api/auth/validate │
└──────────────────────┘
│ JWT (RS256)
┌──────────────────────┐
│ aamos-ledger │ :3250 (Node.js)
│ auth.mjs RS256 verify│
│ GET /api/auth/validate │
└──────────────────────┘
│ RS256 public key verify
/opt/amos/data/keys/jwt-public.pem
```
---
## Filer modifierade
| Fil | Ändring |
|-----|---------|
| `/home/bernt/rust/ouroboros-identity/src/main.rs` | RS256 signing, org_id/roles claims, /api/auth/validate |
| `/home/bernt/bin/ouroboros-identity` | Ny binär (bygd från source) |
| `/opt/amos/services/aamos-ledger/index.mjs` | jwt import, /api/auth/validate GET endpoint |
| `/opt/amos/services/ouroboros-identity/index.mjs` | RS256 fallback + validate (backup, ej i drift) |