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:
| Role | A role that the user has | http://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.