Ich entwickle einige Web-APIs mit .Net Core 3.0 und möchte sie in SwashBuckle.Swagger integrieren. Es funktioniert einwandfrei, aber wenn ich die JWT-Authentifizierung hinzufüge, funktioniert es nicht wie erwartet. Dazu habe ich den folgenden Code hinzugefügt:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "My Web API", Version = "v1" });
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey
});
});
Nach dem Hinzufügen der AddSecurityDefinition
Funktion wird die Schaltfläche "Autorisieren" angezeigt. Wenn ich darauf klicke, wird das folgende Formular angezeigt:
Dann tippe ich Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh
: Nachdem ich es getan habe, erwarte ich, dass es authorization: Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh
im Header der Anfrage angezeigt wird, wenn ich eine Anfrage von Swagger an die Web-API sende. Die Berechtigung wird jedoch nicht zum Anforderungsheader hinzugefügt. Ich benutze SwashBuckle.Swagger (5.0.0-rc3). Bitte beachten Sie, dass es viele Beispiele gibt, die unter .net Core 2.0 einwandfrei funktionieren, aber die Swashbuckle-Swagger-Funktionen wurden in der neuesten Version geändert, sodass ich diese Beispiele nicht verwenden kann.
quelle
.AddSecurityRequirement
(global) oder.Security
(auf Operationsebene) hinzuzufügen - wie in den Antworten auf die verknüpfte Frage erläutert.AddSecurityDefinition
allein reicht nicht aus.Antworten:
Nach einigen Recherchen fand ich schließlich die Antwort hier
Bevor Sie diese Seite sehen, wusste ich , dass ich sollte
AddSecurityRequirement
nachAddSecurityDefinition
wegen der vielen Proben, aber es war ein Problem , dass die Funktionsparameter auf .NET - Core 3.0 geändert haben.Die endgültige Antwort lautet übrigens wie folgt:
quelle
Wenn Sie Swagger 3.0 verwenden, wird die JWT-Authentifizierung bereits unterstützt.
Sie müssen ParameterLocation.Header, SecuritySchemeType.Http, Bearer und JWT in OpenApiSecurityScheme wie unten gezeigt verwenden.
Danach müssen Sie kein Token im Bearer {Token} -Format angeben . Geben Sie nur das Token an, und das Sicherheitsschema wendet es automatisch im Header an.
quelle
Wenn Sie ein Token nicht manuell hinzufügen möchten und die Bereiche auswählbar sein sollen und eine Client-ID an den Identitätsserver übergeben werden soll, können Sie Folgendes hinzufügen.
Ich habe den impliziten Fluss verwendet, aber Sie können jeden Fluss mithilfe des folgenden Mechanismus konfigurieren:
Die Ausgabe sieht folgendermaßen aus:
quelle
Hier ist eine für Swashbuckle.AspNetCore 5.3.2 aktualisierte Lösung, die in IdentityServer4 integriert ist und deren API mit einem Bearer-Token gesichert ist.
In
ConfigureServices()
Methode:In
Configure()
Methode:quelle
Wenn jemand NSwag verwendet und nach der Suche nach der Lösung hier gelandet ist, finden Sie hier den Link aus der offiziellen Dokumentation.
NSwag Aktivieren Sie die JWT-Authentifizierung
PS: Ich weiß, dass die ursprüngliche Frage für SwashBuckle war, aber Google zeigt diesen Link zuerst an, wenn Sie auch nach NSwag suchen.
quelle