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

4.7 KiB

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

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)