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
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
.NET Conference Italia 2024
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
La gestione della riconnessione al server di Blazor in .NET 9
Cambiare la chiave di partizionamento di Azure Cosmos DB
Utilizzare una qualunque lista per i parametri di tipo params in C#
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core