Autenticazione tramite dati biometrici

usando chatGPT ho aggiunto in una mia app android (generata da inde classic) l’autenticazione tramite dati biometrici, niente di particolarmente complicato. Però la sola impronta non ci dice chi è l’utente.
Bisogna seguire per esempio questa procedura suggerita da chatGPT:
Quando l’utente fa login con user+password la prima volta:

  • generi il JWT
  • lo salvi in localStorage

Poi, ai successivi accessi con impronta:

  • non chiedi più la password
  • ma usi il localStorage.getItem("utente") per capire chi è.

L’identità dell’utente viene codificata direttamente dentro il JWT, ed è proprio uno dei motivi principali per cui il JWT è così utile.

:locked_with_key: Cosa contiene un JWT (tipico)

Un JWT (JSON Web Token) ha 3 parti:

  1. Header (algoritmo di firma, tipo token)
  2. Payload (le informazioni, es. utente)
  3. Signature (firma con la chiave segreta)

Esempio di payload di un JWT:

json

CopiaModifica

{
  "sub": "giovanni",
  "iat": 1716891234,
  "exp": 1716894834,
  "ruolo": "ausiliario"
}

:white_check_mark: Quindi sì: l’identità è nel token

  • sub (subject) → tipicamente usato per l’identificativo dell’utente

  • Puoi aggiungere anche ruolo, nome, turno, ecc.

  • Tu nel backend:

  1. verifichi la firma
  2. leggi il payload
  3. estrai l’identità (sub)

E autorizzi l’accesso in base a chi è l’utente.

A questo punto sorge il problema di JWT su InDe!.

Nella documentazione del foundation non ho trovato nulla, ma forse non ho saputo cercare.
In ogni caso chatGPT mi dice che non c’è problema e mi propone due soluzioni:
:yellow_square: 1. VERSIONE PHP – Proxy con verifica JWT
:blue_square: 2. VERSIONE .NET – Web API Proxy con JWT
Io ho scelto PHP perché più leggero e poi un po’ lo conosco.

:white_check_mark: Vantaggi

  • La tua app continua a funzionare come ora
  • Il JWT viene validato senza toccare il framework Instant Developer
  • Puoi loggare, filtrare, rate limitare e proteggere meglio le API

:test_tube: Come si usa

invece di chiamare direttamente la web api si chiama il proxy che chiama la web api, dopo le opportune verifiche. Il proxy poi gira la risposta al client.

Da JavaScript:

const jwt = localStorage.getItem(“jwt”);
const response = await fetch(“https://tuoproxy.it/proxy.php?path=Gestione/Strada&IDComune=123”, {
headers: {
Authorization: "Bearer " + jwt
}
});
const data = await response.json();

Non ho messo tutto dettagliatamente perché è meglio se lo sviluppate guidati da chatGPT (Per me er mejo!).

Ecco il risultato (esempio da PC senza impronta, quindi con passkey, che forse è il caso più comune)


In basso si legge Loggato come …

Riepilogo: ora posso

:white_check_mark: Fare login e restare loggato automaticamente
:white_check_mark: Evitare l’uso di password ogni volta
:white_check_mark: Aggiungere dispositivi con impronta in modo sicuro
:white_check_mark: Controllare via token chi sta accedendo

chatGPT : Fammi sapere se vuoi aggiungere:

  • un logout automatico dopo 1h
  • un timeout di inattività
  • oppure la gestione utente/ruoli per fare access control :bullseye:
    per decidere chi può fare cosa nell’app, basata su:
    Utente (es. gpoido, mario, admin)
    Ruolo (es. admin, vigile, operatore, ospite).

Per finire io ho scelto di usare un login.php e un proxy.php perché molto leggeri, 64 righe uno e 85 righe l’altro.

7 Mi Piace

Bellissimo lavoro, complimenti!

1 Mi Piace

certo che aggiunto da voi direttamente in inde in una prossima versione non sarebbe male!!!

3 Mi Piace