4D NetKit: Autenticazione OpenID sicura con attributo nonce

Tradotto automaticamente da Deepl

Quando si lavora con i moderni flussi di autenticazione, la sicurezza è fondamentale. Gli sviluppatori hanno spesso bisogno di integrare l’autenticazione con fornitori di identità affidabili, come Google o Microsoft. È qui che entra in gioco OpenID Connect (OIDC).

OIDC è un livello di identità costruito sopra OAuth 2.0. Consente alle applicazioni di verificare l’identità di un utente e di ottenere informazioni di base sul profilo in modo sicuro. A partire dagli ultimi miglioramenti apportati alla classe cs.NetKit.OAuth2Provider 4D 21 semplifica il lavoro con OpenID Connect, supportando il parametro nonce e i nuovi attributi del token, tra cui id_token.

Quando si richiedono gli ambiti standard di OAuth 2.0, si riceve un access_token, che serve per accedere alle API, ma non dice chi è l’utente. Per identificare l’utente, è necessario includere l’ambito openid. Questo attiva il livello OpenID Connect e assicura che anche il fornitore di identità restituisca un id_token.

Altri ambiti possono arricchire le informazioni incluse nell’id_token:

  • openid → richiesto, attiva OpenID Connect e fornisce un id_token.
  • profile → opzionale, restituisce informazioni sul profilo come nome, nickname e immagine.
  • email → opzionale, include l’indirizzo email dell’utente.

Il parametro nonce è specifico per le richieste OpenID Connect. Associa una sessione del client al token ID restituito e aiuta a proteggere dagli attacchi di replay.

  • È facoltativo, ma fortemente consigliato per migliorare la sicurezza.
  • Il valore viene passato senza modifiche dalla richiesta di autenticazione al token ID.

Cos’è l’ID_Token?

L’id_token è una proprietà dell’oggetto token, restituita quando viene richiesto l’ambito openid. Contiene informazioni sull’identità dell’utente in formato JWT. Poiché è codificato come testo, è necessario deserializzare il JWT per leggerne il contenuto. Per farlo, si può usare la classe JWT contenuta in Netkit.

var $provider:={}
$provider.name:="Microsoft"
$provider.permission:="signedIn"
$provider.clientId:="xxxx"
$provider.redirectURI:="http://127.0.0.1:80/authorize/"
$provider.scope:="openid profile email" // request identity + profile info
$provider.nonce:="randomNonce456" // optional nonce value 

var $oauth:=cs.NetKit.OAuth2Provider.new($provider)
var $token:=$oauth.getToken()

// Access the id_token
If ($token.token.id_token#Null)

  // Deserialize the JWT result with cs.NetKit.JWT class
  var $openID:=cs.NetKit.JWT.new().decode($token.token.id_token)
  
  If ($openID.payload.nonce=$param.nonce)
     ALERT("Hello "+$openID.payload.name)
  End if 

End if 

//$openID={ 
//   header: {
//      typ: "JWT";
//      alg: "RS256";
//      kid: "HS23b7Do..."
//   };
//   payload: {
//      aud: "b6822251-7...";     // the clientId (your application).
//      iss: "https://login.microsoftonline.com/06dc191b-7348-4b66-b0d9-806cb7d9455b/v2.0";
//      iat: 1758537433;          // the time when the token was issued.
//      nbf: 1758537433;          // the earliest time when the token is considered valid.
//      exp: 1758541333;          // the token expiration time.
//      email: "your.name@outlook.com";
//      name: "Your Name";       
//      nonce: "randomNonce456";  // the value sent in the request to protect against replay attacks (if used).
//      oid: "064fd139-65...";    // the unique identifier of the user’s account in the identity provider’s directory
//      preferred_username: "your.name@outlook.com";
//      rh: "1.AV8AGxncBkhz...";  // refresh token handle
//      sid: "008cb789-7...";     // session ID
//      sub: "6RcYjA-CqS...";     // the unique identifier of the user
//      tid: "06dc191b-73...";    // identifies the tenant (organization)
//      uti: "sS7qSOW0...";       // unique token identifier
//      ver: "2.0"
//   };
//   signature": "gy4AwVunCf_NbeUP..."
//}

conclusione

Con l’introduzione del supporto per nonce e id_token, 4D semplifica l’integrazione di OpenID Connect. Richiedendo gli ambiti giusti e decodificando l’id_token, le applicazioni possono autenticare in modo sicuro gli utenti e accedere a informazioni affidabili sull’identità.

Fabrice Mainguené
- Product Owner -Fabrice Mainguené si è unito al team di 4D Program nel novembre 2016. In qualità di Product Owner, è incaricato di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente.Dopo aver conseguito una laurea in Informatica presso il CNAM, Fabrice è entrato a far parte di una piccola società di pubblicazione di software come sviluppatore Windev. In seguito ha lavorato per diverse aziende del settore industriale e commerciale come sviluppatore Windev e web e come consulente tecnico su nuove funzionalità.