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).
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 pro použití příkazu na. 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 a použije tento soubor.
Příkazy
| Příkaz | Popis |
|---|---|
| odznačit | Odstraňte všechny vydané JWT pro projekt. |
| vytvořit | Zadejte nový webový token JSON. |
| odebrat | Odstraňte daný JWT. |
| klíč | Zobrazení nebo resetování podpisového klíče použitého k vydávání JWT |
| list | Zobrazí seznam JWT vydaných pro projekt. |
| tisknout | Zobrazí podrobnosti o daném JWT. |
Vytvoření
Použití: dotnet user-jwts create [options]
| Možnost | Popis |
|---|---|
| -p | --projekt | Cesta projektu, na které se má pracovat. Ve výchozím nastavení je projekt v aktuálním adresáři. |
| --schéma | Název schématu, který se má použít pro vygenerovaný token. Výchozí hodnota je nosná. |
| -n | --Jméno | Jméno uživatele, pro který má vytvořit JWT. Výchozí hodnota je pro aktuálního uživatele prostředí. |
| --obecenstvo | Cílové skupiny pro vytvoření JWT pro. Ve výchozím nastavení se nastaví adresy URL nakonfigurované v launchSettings.json projektu. |
| --emitent | Vystavitel JWT. Výchozí hodnota je dotnet-user-jwts. |
| --rozsah | Deklarace oboru, která se má přidat do JWT. Zadejte jednou pro každý obor. |
| --role | Deklarace role, která se má přidat do JWT. Zadejte jednou pro každou roli. |
| --tvrzení | Deklarace identity, které se mají přidat do JWT. Zadejte jednou pro každou deklaraci identity ve formátu name=value. |
| --not-before | Datum a čas UTC, které JWT nesmí být platné před formátem rrrr-MM-dd [[HH:mm[[:ss]]]]. Výchozí hodnota je datum a čas vytvoření JWT. |
| --expires-on | Datum a čas UTC by měl vypršet platnost JWT ve formátu rrrr-MM-dd [[[ [HH:mm]]:ss]'. Výchozí hodnota je 6 měsíců po datu --not-before. Tuto možnost nepoužívejte ve spojení s parametrem --valid-for. |
| --valid-for | Doba, po které má JWT vypršet. Zadejte pomocí čísla následovaného typem doby trvání jako d pro dny, h pro hodiny, m pro minuty a s po sekundách, například 365d. Tuto možnost nepoužívejte ve spojení s možností --expires-on. |
| -o | --výstup | Formát, který se má použít pro zobrazení výstupu z příkazu. Může to být jedna z výchozích hodnot, tokenu nebo json. |
| -h | --Pomoc | Zobrazit informace nápovědy |
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
Program.cs Obsah 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 vrátí /secret401 Unauthorized chybu. Produkční aplikace může získat JWT ze služby tokenů zabezpečení (STS), například v reakci na přihlášení pomocí sady přihlašovacích údajů. Pro účely práce s rozhraním API během místního vývoje dotnet user-jwts je možné nástroj příkazového řádku použít k vytváření a správě místních JWT specifických pro aplikace.
Tento user-jwts nástroj se podobá nástroji 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. Nástroj user-jwts ve skutečnosti využívá infrastrukturu user-secrets ke správě klíče, kterým jsou podpisy JWT, a zajišťuje bezpečné uložení 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:
Cesta k systému souborů:
%APPDATA%\Microsoft\UserSecrets\<secrets_GUID>\user-jwts.json
Vytvoření 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ý následujícímu:
{
"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 JWT a ID vytvořený v předchozím příkazu. K otestování /secretpoužijte nástroj, jako je Curl:
curl -i -H "Authorization: Bearer {token}" https://localhost:{port}/secret
Kde {token} je dříve vygenerovaný JWT.
Zobrazení informací o zabezpečení JWT
Následující příkaz zobrazí informace o zabezpečení JWT, 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
Podporované možnosti vytváření najdete v části Vytvoření v tomto tématu.
Následující příkaz vytvoří JWT pro uživatele s názvem MyTestUser:
dotnet user-jwts create --name MyTestUser --scope "myapi:secrets"
Předchozí příkaz má výstup podobný následujícímu:
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();