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é) ?

Comment puis-je configurer ASP.NET Core pour prendre en charge plusieurs émetteurs de jetons JWT (par exemple, Firebase et un émetteur personnalisé) ?

DDD
DDDoriginal
2025-01-12 06:24:47340parcourir

How can I configure ASP.NET Core to support multiple JWT token issuers (e.g., Firebase and a custom issuer)?

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 :

  • Aucun schéma d'authentification par défaut : 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.
  • Schémas d'authentification nommés : AddJwtBearer est utilisé avec un nom de schéma ("Firebase", "Custom") pour enregistrer chaque émetteur séparément.
  • Autorisation combinée : La stratégie d'autorisation par défaut est configurée pour utiliser à la fois les schémas « Firebase » et « Personnalisé ». Cela garantit que des tentatives d'authentification seront effectuées contre les deux émetteurs.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn