in Architettura Software

Auth0 – ASP.Net Core e ruoli

Nel post precedente abbbiamo visto come si possibile aggiungere anche i ruoli all’interno dell’access token.

All’interno di un’applicazione ASP.NET Core l’integrazione con i ruoli è già presente e attiva di default.

E’ sufficiente, infatti, decorare l’action del controller con il permesso che ne consentirà l’esecuzione:

        [HttpGet("private-role")]
        [Authorize(Roles = "Admin")]
        public IActionResult PermissionRole() {
        
        ....
        ....
        ....
        
        }

In questo caso è stata definita un’action chiamata PermissionRole che risponde alla route private-role. L’action richiede la presenza di un utente loggato e con il ruolo Admin associato.

Dopo avere aggiunto la rule del post precedente all’interno di Auth0, i ruoli sono inseriti automaticamente all’interno dell’access token.

I ruoli sono gestiti da ASPNET Core come dei claims, e per poter essere gestiti correttamente devono rispondere ad un particolare schema. In particolare, all’interno di questo post sono elencati tutti i possibili schema che possono essere utilizzati.

In particolare, per la gestione dei ruoli è necessario utilizzare il seguente schema:

RoleA role that the user hashttp://schemas.microsoft.com/ws/2008/06/identity/claims/role

A questo punto, per poter utilizzare direttamente i ruoli all’interno della nostra appliczione è necessario modificare il codice del post precedente modificando il namespace (o meglio lo schema):

unction (user, context, callback) {
  const namespace = 'http://schemas.microsoft.com/ws/2008/06/identity/claims';
  const assignedRoles = (context.authorization || {}).roles;

  let idTokenClaims = context.idToken || {};
  let accessTokenClaims = context.accessToken || {};

  idTokenClaims[`${namespace}/role`] = assignedRoles;
  accessTokenClaims[`${namespace}/role`] = assignedRoles;

  context.idToken = idTokenClaims;
  context.accessToken = accessTokenClaims;

  callback(null, user, context);
}

Ovviamente utilizzando le permissions la gestione dei permessi sulle api risulta maggiornamente capillare, ma la gestione dei ruoli è sicuramente molto comoda e semplifica il flusso in molti casi.