Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Autor: Rick Anderson
Nástroj dotnet user-jwts příkazového řádku může vytvářet a spravovat místní webové tokeny JSON specifické pro aplikaci (JWT).
Tento článek obsahuje podrobnosti syntaxe pro příkaz a příklady.
Synopse
dotnet user-jwts [<PROJECT>] [command]
dotnet user-jwts [command] -h|--help
Popis
Vytvoří a spravuje místní webové tokeny JSON specifické pro projekt.
Argumenty
PROJECT | SOLUTION
Projekt MSBuild, na který se má použít příkaz. Pokud projekt není zadaný, nástroj MSBuild vyhledá v aktuálním pracovním adresáři soubor, který má příponu souboru končící proj. Potom tento soubor použije k získání informací o projektu pro příkaz.
Příkazy
| Příkaz | Popis |
|---|---|
clear |
Odstraňte všechny vydané JWT pro projekt. |
create |
Zadejte nový webový token JSON. |
remove |
Odstranění daného JWTobjektu . |
key |
Zobrazení nebo resetování podpisového klíče použitého k vydávání JWT |
list |
Uveďte seznam JWT vydaných pro projekt. |
print |
Zobrazí podrobnosti daného JWTsouboru . |
Možnosti příkazu create
Použití: dotnet user-jwts create [options]
| Možnost | Popis |
|---|---|
-p \| --project |
Cesta projektu, na které se má pracovat. Ve výchozím nastavení se použije projekt v aktuálním adresáři. |
--scheme |
Název schématu, který se má použít pro vygenerovaný token. Výchozí hodnota je Bearer. |
-n \| --name |
Jméno uživatele, pro který se má vytvořit JWT . Výchozí hodnota je pro aktuálního uživatele prostředí. |
--audience |
Cílové skupiny, pro které se mají JWT vytvořit. Výchozí hodnota je adresa URL nakonfigurovaná v souboru launchSettings.json projektu. |
--issuer |
Vystavitel JWT. Výchozí hodnota je dotnet-user-jwts. |
--scope |
Deklarace oboru, která se má přidat do objektu JWT. Zadejte jednou pro každý obor. |
--role |
Deklarace role, která se má přidat do objektu JWT. Zadejte jednou pro každou roli. |
--claim |
Deklarace identity, které se mají přidat do .JWT Zadejte jednou pro každý claim ve formátu name=value. |
--not-before |
Datum a čas UTC, JWT kdy se stane platným, ve formátu yyyy-MM-dd [[HH:mm[[:ss]]]]. Výchozí hodnota je datum a čas vytvoření JWT . |
--expires-on |
Datum a čas UTC, kdy JWT vyprší platnost, ve formátu yyyy-MM-dd [[[ [HH:mm]]:ss]]. Výchozí hodnota je šest měsíců po --not-before datu. Tuto možnost nepoužívejte s možností --valid-for. |
--valid-for |
Doba, po kterou JWT zůstane platná. Po dosažení JWT času vyprší platnost. Zadejte číslo následované typem doby trvání (d dny, h hodiny, m minuty, s sekundy), například 365d. Tuto možnost nepoužívejte s možností --expires-on. |
-o \| --output |
Formát, který se má použít pro zobrazení výstupu z příkazu: default, tokennebo json. |
-h \| --help |
Zobrazí informace nápovědy pro příkaz. |
Příklady
Spuštěním následujících příkazů vytvořte prázdný webový projekt a přidejte balíček NuGet Microsoft.AspNetCore.Authentication.JwtBearer :
dotnet new web -o MyJWT
cd MyJWT
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
Obsah souboru Program.cs nahraďte následujícím kódem:
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();
V předchozím kódu požadavek GET na /secret koncový bod vrátí 401 Unauthorized chybu. Produkční aplikace může získat JWT službu tokenů zabezpečení, například v reakci na přihlášení pomocí přihlašovacích údajů. Pokud rozhraní API používáte při místním vývoji, dotnet user-jwts můžete nástroj příkazového řádku použít k vytváření a správě místních JWT specifických pro aplikaci.
Tento user-jwts nástroj je podobný konceptu jako nástroj pro tajné kódy uživatelů . Dá se použít ke správě hodnot pro aplikaci, které jsou platné jenom pro vývojáře na místním počítači. Ve skutečnosti nástroj user-jwts využívá infrastrukturu user-secrets ke správě klíče, kterým jsou JWT podepisovány. Tento přístup zajišťuje bezpečné uložení klíče v profilu uživatele.
Nástroj user-jwts skryje podrobnosti implementace, například kde a jak se hodnoty ukládají. Nástroj lze použít bez znalosti podrobností implementace.
Hodnoty se ukládají do souboru JSON ve složce profilu uživatele místního počítače:
Windows: %APPDATA%\Microsoft\UserSecrets<secrets_GUID>\user-jwts.jszapnuto
Linux/macOS: ~/.microsoft/usersecrets/<secrets_GUID>/user-jwts.json
Vytvořte soubor JWT
Následující příkaz vytvoří místní JWT:
dotnet user-jwts create
Předchozí příkaz vytvoří JWT a aktualizuje soubor projektu appsettings.Development.json pomocí formátu JSON, podobně jako v následujícím příkladu:
{
"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"
}
}
}
}
Zkopírujte a JWT vytvořili ID v předchozím příkazu. Pomocí nástroje, jako je Curl, otestujte /secret koncový bod, kde {token} se dříve vygeneroval JWT:
curl -i -H "Authorization: Bearer {token}" https://localhost:{port}/secret
Zobrazení JWT informací o zabezpečení
Následující příkaz zobrazí JWT informace o zabezpečení, včetně vypršení platnosti, oborů, rolí, hlavičky tokenu a datové části a kompaktního tokenu:
dotnet user-jwts print {ID} --show-all
Vytvoření tokenu pro konkrétního uživatele a obor
Následující příkaz vytvoří JWT pro uživatele s názvem MyTestUser. Podporované create možnosti najdete v části Možnosti pro příkaz create .
dotnet user-jwts create --name MyTestUser --scope "myapi:secrets"
Předchozí příkaz má výstup podobný následujícímu příkladu:
New JWT saved with ID '43e0b748'.
Name: MyTestUser
Scopes: myapi:secrets
Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.{Remaining token deleted}
Předchozí token lze použít k otestování koncového /secret2 bodu v následujícím kódu:
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();