Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Rick Anderson
Das dotnet user-jwts Befehlszeilentool kann App-spezifische lokale JSON-Webtoken (JWTs) erstellen und verwalten.
Dieser Artikel enthält Syntaxdetails für den Befehl und die Beispiele.
Übersicht
dotnet user-jwts [<PROJECT>] [command]
dotnet user-jwts [command] -h|--help
Beschreibung
Erstellt und verwaltet projektspezifische lokale JSON-Webtoken.
Argumente
PROJECT | SOLUTION
Das MSBuild-Projekt, auf das ein Befehl angewendet werden soll. Wenn kein Projekt angegeben ist, durchsucht MSBuild das aktuelle Arbeitsverzeichnis nach einer Datei, die über eine Dateierweiterung verfügt, die in Proj endet. Anschließend wird diese Datei verwendet, um die Projektinformationen für den Befehl abzurufen.
Befehle
| Befehl | Beschreibung |
|---|---|
clear |
Löscht alle ausgestellten JWTs für ein Projekt. |
create |
Stellt ein neues JSON-Webtoken aus. |
remove |
Löscht ein angegebenes JWT. |
key |
Den zum Ausstellen von JWTs verwendeten Signaturschlüssel anzeigen oder zurücksetzen. |
list |
Die für das Projekt ausgegebenen JWTs auflisten. |
print |
Zeigt die Details eines angegebenen JWT an. |
Optionen für den Befehl "Erstellen"
Verwendung: dotnet user-jwts create [options]
| Option | Beschreibung |
|---|---|
-p \| --project |
Der Pfad des Projekts, das bearbeitet werden soll. Ist standardmäßig auf das Projekt im aktuellen Verzeichnis festgelegt. |
--scheme |
Der Schemaname, der für das generierte Token verwendet werden soll. Wird standardmäßig auf Bearer festgelegt. |
-n \| --name |
Der Name des Benutzers, für den das JWT erstellt werden soll. Standardmäßig wird der aktuelle Umgebungsbenutzer verwendet. |
--audience |
Die Zielgruppen, für die das JWT erstellt werden soll. Standardmäßig werden die URLs verwendet, die in der launchSettings.json-Datei des Projekts konfiguriert sind. |
--issuer |
Der Aussteller des JWT. Wird standardmäßig auf dotnet-user-jwts festgelegt. |
--scope |
Ein Scope-Claim, das dem JWT hinzugefügt werden soll. Einmal pro Bereich angeben. |
--role |
Ein Rollenanspruch, der dem JWT hinzugefügt werden soll. Geben Sie dies einmal für jede Rolle an. |
--claim |
Ansprüche, die dem JWT hinzugefügt werden sollen. Geben Sie dies für jeden Anspruch einmal im Format name=value an. |
--not-before |
Das UTC-Datum und die Uhrzeit, zu dem der JWT im Format yyyy-MM-dd [[HH:mm[[:ss]]]]gültig wird. Standardmäßig werden das Erstellungsdatum und die Erstellungszeit des JWT verwendet. |
--expires-on |
Das UTC-Datum und die Uhrzeit, zu dem das JWT abläuft, im Format yyyy-MM-dd [[[ [HH:mm]]:ss]]. Der Standardwert ist sechs Monate nach dem --not-before Datum. Verwenden Sie diese Option nicht mit der Option --valid-for. |
--valid-for |
Der Zeitraum, in dem der JWT gültig bleibt. Wenn die Zeit erreicht ist, läuft das JWT ab. Geben Sie eine Zahl gefolgt von der Zeiteinheit (d Tage, h Stunden, m Minuten, s Sekunden) an, z. B. 365d. Verwenden Sie diese Option nicht mit der Option --expires-on. |
-o \| --output |
Das Format, das zum Anzeigen der Ausgabe aus dem Befehl verwendet werden soll: default, , tokenoder json. |
-h \| --help |
Hilfeinformationen für den Befehl anzeigen. |
Beispiele
Führen Sie die folgenden Befehle aus, um ein leeres Webprojekt zu erstellen und das NuGet-Paket Microsoft.AspNetCore.Authentication.JwtBearer hinzuzufügen:
dotnet new web -o MyJWT
cd MyJWT
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
Ersetzen Sie den Inhalt der datei Program.cs durch den folgenden Code:
using System.Security.Claims;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthorization();
builder.Services.AddAuthentication("Bearer").AddJwtBearer();
var app = builder.Build();
app.UseAuthorization();
app.MapGet("/", () => "Hello, World!");
app.MapGet("/secret", (ClaimsPrincipal user) => $"Hello {user.Identity?.Name}. My secret")
.RequireAuthorization();
app.Run();
Im vorherigen Code gibt eine GET-Anforderung an den /secret Endpunkt einen 401 Unauthorized Fehler zurück. Eine Produktions-App kann das JWT von einem Sicherheitstokendienst abrufen, möglicherweise als Reaktion auf die Anmeldung mit Anmeldeinformationen. Wenn Sie die API während der lokalen Entwicklung verwenden, kann das dotnet user-jwts Befehlszeilentool zum Erstellen und Verwalten von appspezifischen lokalen JWTs verwendet werden.
Das user-jwts Tool ähnelt dem Konzept des Tools mit geheimen Benutzerschlüsseln . Sie kann verwendet werden, um Werte für die App zu verwalten, die nur für den Entwickler auf dem lokalen Computer gültig sind. Tatsächlich verwendet das user-jwts Tool die user-secrets Infrastruktur, um den Schlüssel zu verwalten, mit dem die JWTs signiert sind. Durch diesen Ansatz wird sichergestellt, dass der Schlüssel sicher im Benutzerprofil gespeichert wird.
Das user-jwts Tool blendet Implementierungsdetails aus, z. B. wo und wie die Werte gespeichert werden. Das Tool kann verwendet werden, ohne die Implementierungsdetails zu kennen.
Die Werte werden in einer JSON-Datei im Benutzerprofilordner des lokalen Computers gespeichert:
Windows: %APPDATA%\Microsoft\UserSecrets<secrets_GUID>\user-jwts.json
Linux/macOS: ~/.microsoft/usersecrets/<secrets_GUID>/user-jwts.json
Erstellen eines JWT
Der folgende Befehl erstellt ein lokales JWT:
dotnet user-jwts create
Mit dem vorherigen Befehl wird ein JWT erstellt und die Projektdatei appsettings.Development.json mit JSON aktualisiert, ähnlich wie im folgenden Beispiel:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Authentication": {
"Schemes": {
"Bearer": {
"ValidAudiences": [
"http://localhost:8401",
"https://localhost:44308",
"http://localhost:5182",
"https://localhost:7076"
],
"ValidIssuer": "dotnet-user-jwts"
}
}
}
}
Kopieren Sie das JWT und das im vorherigen Befehl erstellte ID. Verwenden Sie ein Tool wie Curl, um den /secret Endpunkt zu testen. Dabei {token} handelt es sich um das zuvor generierte JWT:
curl -i -H "Authorization: Bearer {token}" https://localhost:{port}/secret
Anzeigen von JWT-Sicherheitsinformationen
Mit dem folgenden Befehl werden die JWT-Sicherheitsinformationen angezeigt, einschließlich Ablaufzeit, Berechtigungsumfänge, Rollen, Token-Header und Nutzlast sowie das kompakte Token:
dotnet user-jwts print {ID} --show-all
Erstellen eines Tokens für einen bestimmten Benutzer und Bereich
Mit dem folgenden Befehl wird ein JWT für einen Benutzer mit dem Namen MyTestUsererstellt. Die unterstützten create Optionen finden Sie im Abschnitt "Optionen für den Befehl erstellen" .
dotnet user-jwts create --name MyTestUser --scope "myapi:secrets"
Der vorangehende Befehl gibt eine Ausgabe aus, die dem folgenden Beispiel ähnelt:
New JWT saved with ID '43e0b748'.
Name: MyTestUser
Scopes: myapi:secrets
Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.{Remaining token deleted}
Das vorangehende Token kann verwendet werden, um den /secret2-Endpunkt im folgenden Code zu testen:
using System.Security.Claims;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthorization();
builder.Services.AddAuthentication("Bearer").AddJwtBearer();
var app = builder.Build();
app.MapGet("/", () => "Hello, World!");
app.MapGet("/secret", (ClaimsPrincipal user) => $"Hello {user.Identity?.Name}. My secret")
.RequireAuthorization();
app.MapGet("/secret2", () => "This is a different secret!")
.RequireAuthorization(p => p.RequireClaim("scope", "myapi:secrets"));
app.Run();