Start Debugging

Scalar in ASP.NET Core: warum Ihr Bearer-Token ignoriert wird (.NET 10)

Wenn Ihr Bearer-Token in Postman funktioniert, in Scalar aber nicht, liegt das Problem wahrscheinlich an Ihrem OpenAPI-Dokument. So deklarieren Sie ein passendes Security-Schema in .NET 10.

Scalar taucht immer öfter als saubere UI-Alternative für OpenAPI-Dokumente in ASP.NET Core auf. Eine frische r/dotnet-Frage zeigt eine häufige Falle: Sie fügen einen Token in Scalars Auth-UI ein, Postman funktioniert, aber Scalar-Aufrufe treffen Ihre API weiterhin ohne Authorization: Bearer ...: https://www.reddit.com/r/dotnet/comments/1qkjvb0/need_help_with_authentication_using_scalar_aspnet/.

Das Problem ist selten “JWT-Auth ist kaputt”. Meistens deklariert Ihr OpenAPI-Dokument schlicht kein passendes HTTP-Bearer-Security-Schema, sodass die UI nichts Verlässliches hat, das sie auf Ihre Operationen anwenden kann.

Scalar folgt Ihrem OpenAPI-Vertrag, nicht Ihrer Middleware

In .NET 10 können Sie Authentifizierung vollständig in der Pipeline konfigurieren und trotzdem ein OpenAPI-Dokument ausliefern, das nichts über Auth aussagt. In dem Fall verhalten sich Tools inkonsistent:

Die offizielle ASP.NET-Core-Integration-Doku von Scalar ist hier der beste Anker: https://scalar.com/products/api-references/integrations/aspnetcore/integration.

Bearer-Sicherheit im OpenAPI-Dokument deklarieren

Wenn Sie die eingebaute OpenAPI-Unterstützung verwenden, lautet die Lösung: einen Transformer hinzufügen, der das http-bearer-Schema einspeist und auf die Operationen anwendet (global oder selektiv).

Das ist die benötigte Form (auf das Wesentliche gekürzt):

using Microsoft.OpenApi.Models;

// Program.cs (.NET 10)
builder.Services.AddOpenApi("v1", options =>
{
    options.AddDocumentTransformer((document, context, ct) =>
    {
        document.Components ??= new OpenApiComponents();
        document.Components.SecuritySchemes ??= new Dictionary<string, OpenApiSecurityScheme>();

        document.Components.SecuritySchemes["Bearer"] = new OpenApiSecurityScheme
        {
            Type = SecuritySchemeType.Http,
            Scheme = "bearer",
            BearerFormat = "JWT"
        };

        // Apply globally (or attach per operation if you prefer)
        document.SecurityRequirements ??= new List<OpenApiSecurityRequirement>();
        document.SecurityRequirements.Add(new OpenApiSecurityRequirement
        {
            [new OpenApiSecurityScheme { Reference = new OpenApiReference
                { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }] = Array.Empty<string>()
        });

        return ValueTask.CompletedTask;
    });
});

Sobald das Dokument das Security-Schema ausdrückt, kann Scalar den von Ihnen eingegebenen Token vorhersagbar auf Anfragen anwenden.

Stellen Sie sicher, dass Scalar auf denselben OpenAPI-Endpunkt zeigt

Die zweite Stolperfalle ist die Verdrahtung: Scalar muss auf das soeben reparierte OpenAPI-Dokument zeigen (zum Beispiel "/openapi/v1.json"). Halten Sie das Mapping nahe an Ihrer OpenAPI-Konfiguration, damit Sie Scalar nicht versehentlich gegen ein älteres Dokument bereitstellen.

In Scalar gibt es außerdem eine Option, HTTP-Bearer-Auth in der UI-Mapping-Schicht zu konfigurieren. Wenn Sie das nutzen, behandeln Sie es als Bequemlichkeit, nicht als Source of Truth. Der OpenAPI-Vertrag sollte das Bearer-Schema weiterhin deklarieren.

Ein schneller Realitätscheck

Wenn Sie die Ursache in Minuten bestätigen wollen:

Ursprünglicher Auslöser-Thread (inkl. Screenshots): https://www.reddit.com/r/dotnet/comments/1qkjvb0/need_help_with_authentication_using_scalar_aspnet/.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Zurück