Quando vogliamo proteggere le API in ASP.NET Core tramite Azure Active Directory, possiamo utilizzare il nuovo modulo Microsoft.Identity.Web, che ci consente di configurare la security con una sola riga di codice.
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAd")); // .. altro codice qui .. }
Questa configurazione utilizza per default il claim denominato preferred_username come nome utente, associandolo alla proprietà ClaimsIdentity.Name. Nella maggioranza dei casi, il contenuto di questo claim corrisponde all'indirizzo email dell'utente, che sarà quindi il dato restituito, per esempio, da una action come quella in basso:
public class SomeController : ControllerBase { [HttpGet] public string Get() { return this.User.Identity.Name; } }
Tuttavia, in alcune occasioni potrebbe far comodo utilizzare un claim differente, per esempio name, che contiene invece il full name dell'utente. Questo mapping può essere configurato in fase di startup:
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(options => { Configuration.Bind("AzureAd", options); options.TokenValidationParameters.NameClaimType = "name"; }, options => { Configuration.Bind("AzureAd", options); }); // .. altro codice qui .. }
Purtroppo l'overload di AddMicrosoftIdentityWebApi da utilizzare non è dei più eleganti, e ci costringe a referenziare per due volte la stessa sezione del file di configurazione. Tutto ciò che dobbiamo fare è impostare la proprietà TokenValidationParameters.NameClaimType a name, che è il claim desiderato.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Evitare la command injection in un workflow di GitHub
Utilizzare domini personalizzati gestiti automaticamente con Azure Container Apps
Eseguire query verso tipi non mappati in Entity Framework Core
Effettuare chiamate con versioning da Blazor ad ASP.NET Core
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Eseguire una query su SQL Azure tramite un workflow di GitHub
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Miglioramenti nelle performance di Angular 16
Utilizzare politiche di resiliency con Azure Container App
Code scanning e advanced security con Azure DevOps
Verificare la provenienza di un commit tramite le GitHub Actions
Sfruttare lo streaming di una chiamata Http da Blazor
I più letti di oggi
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Estrarre dati randomici da una lista di oggetti in C#
- Utilizzare un DataContext specifico per la modalità design time di Blend e Visual Studio nei controlli Silverlight
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione