Heim >Backend-Entwicklung >C++ >Wie kann ich ASP.NET Core so konfigurieren, dass es mehrere JWT-Token-Aussteller unterstützt (z. B. Firebase und einen benutzerdefinierten Aussteller)?

Wie kann ich ASP.NET Core so konfigurieren, dass es mehrere JWT-Token-Aussteller unterstützt (z. B. Firebase und einen benutzerdefinierten Aussteller)?

DDD
DDDOriginal
2025-01-12 06:24:47386Durchsuche

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

Unterstützung mehrerer JWT-Token-Aussteller in ASP.NET Core

In diesem Handbuch wird erläutert, wie Sie ASP.NET Core für die Authentifizierung von JWTs aus mehreren Quellen konfigurieren, z. B. Firebase und einem benutzerdefinierten Aussteller. Die Standardmethode AddJwtBearer unterstützt nur eine einzige Autorität, was dies zu einer häufigen Herausforderung macht.

Die Lösung: Mehrere Authentifizierungsschemata

Der Schlüssel liegt in der Verwendung mehrerer Authentifizierungsschemata innerhalb von ASP.NET Core. Dadurch kann die Anwendung JWTs von verschiedenen Emittenten unabhängig verarbeiten.

Implementierung (ASP.NET Core 2 und höher):

<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>

Wichtige Verbesserungen:

  • Kein Standardauthentifizierungsschema: AddAuthentication() wird ohne Parameter aufgerufen. Dadurch wird die automatische Authentifizierung mit einem einzigen Schema verhindert, sodass alle definierten Schemata einen Authentifizierungsversuch unternehmen können.
  • Benannte Authentifizierungsschemata: AddJwtBearer wird mit einem Schemanamen („Firebase“, „Benutzerdefiniert“) verwendet, um jeden Aussteller separat zu registrieren.
  • Kombinierte Autorisierung: Die Standardautorisierungsrichtlinie ist so konfiguriert, dass sowohl „Firebase“- als auch „benutzerdefinierte“ Schemata verwendet werden. Dadurch wird sichergestellt, dass Authentifizierungsversuche gegen beide Aussteller durchgeführt werden.

Fehlerbehandlung:

Bei Authentifizierungsfehlern können IDX10501 Fehler auftreten. Dies liegt häufig daran, dass die Authentifizierungs-Middleware jedes Schema nacheinander überprüft. In vielen Fällen kann dieser Fehler getrost ignoriert werden.

ASP.NET Core 6 und höher:

In neueren Versionen ist ein Standardauthentifizierungsschema erforderlich. Hier ist ein angepasstes Beispiel:

<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>

Denken Sie daran, Platzhalter wie "my-firebase-project", "your-custom-issuer", "your-secret-key", "your-api-audience", "your-identity-server-url" und "your-azure-ad-authority" durch Ihre tatsächlichen Werte zu ersetzen. Erwägen Sie die Verwendung einer robusteren Schlüsselverwaltung für Produktionsumgebungen. Richtlinienbasierte Autorisierung kann eine detailliertere Kontrolle für komplexe Szenarien ermöglichen.

Das obige ist der detaillierte Inhalt vonWie kann ich ASP.NET Core so konfigurieren, dass es mehrere JWT-Token-Aussteller unterstützt (z. B. Firebase und einen benutzerdefinierten Aussteller)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn