Maison >développement back-end >C++ >Comment puis-je configurer ASP.NET Core pour prendre en charge plusieurs émetteurs de jetons JWT (par exemple, Firebase et un émetteur personnalisé) ?
Prise en charge de plusieurs émetteurs de jetons JWT dans ASP.NET Core
Ce guide explique comment configurer ASP.NET Core pour authentifier les JWT provenant de plusieurs sources, telles que Firebase et un émetteur personnalisé. La méthode standard AddJwtBearer
ne prend en charge qu'une seule autorité, ce qui en fait un défi courant.
La solution : plusieurs schémas d'authentification
La clé est d'utiliser plusieurs schémas d'authentification dans ASP.NET Core. Cela permet à l'application de gérer indépendamment les JWT de différents émetteurs.
Implémentation (ASP.NET Core 2 et versions ultérieures) :
<code class="language-csharp">services .AddAuthentication() // No default scheme specified .AddJwtBearer("Firebase", options => { options.Authority = "https://securetoken.google.com/my-firebase-project"; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = "my-firebase-project", ValidateAudience = true, ValidAudience = "my-firebase-project", ValidateLifetime = true }; }) .AddJwtBearer("Custom", options => { // Configure validation parameters for your custom JWT issuer here. // Example: options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = "your-custom-issuer", ValidateAudience = true, ValidAudience = "your-api-audience", ValidateLifetime = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key")) // Or your key retrieval method }; }); services .AddAuthorization(options => { options.DefaultPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddAuthenticationSchemes("Firebase", "Custom") .Build(); });</code>
Améliorations clés :
AddAuthentication()
est appelé sans paramètres. Cela empêche l'authentification automatique avec un seul schéma, permettant à tous les schémas définis de tenter l'authentification.AddJwtBearer
est utilisé avec un nom de schéma ("Firebase", "Custom") pour enregistrer chaque émetteur séparément.Gestion des erreurs :
Vous pourriez rencontrer des IDX10501
erreurs lors d'échecs d'authentification. Cela est souvent dû au fait que le middleware d’authentification vérifie chaque schéma de manière séquentielle. Dans de nombreux cas, cette erreur peut être ignorée en toute sécurité.
ASP.NET Core 6 et versions ultérieures :
Dans les versions plus récentes, un schéma d'authentification par défaut est requis. Voici un exemple adapté :
<code class="language-csharp">builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.Audience = "your-api-audience"; options.Authority = "your-identity-server-url"; // Or your default JWT issuer }) .AddJwtBearer("AzureAD", options => { options.Audience = "your-api-audience"; options.Authority = "your-azure-ad-authority"; }); builder.Services.AddAuthorization(options => { options.DefaultPolicy = new AuthorizationPolicyBuilder( JwtBearerDefaults.AuthenticationScheme, "AzureAD") .RequireAuthenticatedUser() .Build(); });</code>
N'oubliez pas de remplacer les espaces réservés tels que "my-firebase-project"
, "your-custom-issuer"
, "your-secret-key"
, "your-api-audience"
, "your-identity-server-url"
et "your-azure-ad-authority"
par vos valeurs réelles. Envisagez d'utiliser une gestion des clés plus robuste pour les environnements de production. L'autorisation basée sur des stratégies peut fournir un contrôle plus précis pour les scénarios complexes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!