Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Door Rick Anderson
Het dotnet user-jwts opdrachtregelprogramma kan app-specifieke lokale JSON-webtokens (JWT's) maken en beheren.
Dit artikel bevat syntaxisdetails voor de opdracht en voorbeelden.
Samenvatting
dotnet user-jwts [<PROJECT>] [command]
dotnet user-jwts [command] -h|--help
Description
Hiermee maakt en beheert u projectspecifieke lokale JSON-webtokens.
Arguments
PROJECT | SOLUTION
Het MSBuild-project waarop een opdracht moet worden toegepast. Als een project niet is opgegeven, zoekt MSBuild in de huidige werkmap naar een bestand met een bestandsextensie die eindigt op proj. Vervolgens wordt dat bestand gebruikt om de projectgegevens voor de opdracht op te halen.
Commands
| Command | Description |
|---|---|
clear |
Verwijder alle uitgegeven JWT's voor een project. |
create |
Geef een nieuw JSON-webtoken op. |
remove |
Een bepaalde JWT verwijderen. |
key |
De ondertekeningssleutel weergeven of opnieuw instellen die wordt gebruikt om JWT's uit te geven. |
list |
Vermeld de JWT's die voor het project zijn uitgegeven. |
print |
De details van een bepaalde JWT weergeven. |
Opties voor de create-opdracht
Gebruik: dotnet user-jwts create [options]
| Optie | Description |
|---|---|
-p \| --project |
Het pad van het project waarop gewerkt moet worden. Wordt standaard ingesteld op het project in de huidige map. |
--scheme |
De schemanaam die moet worden gebruikt voor het gegenereerde token. Wordt standaard ingesteld op Bearer. |
-n \| --name |
De naam van de gebruiker waarvoor de JWT moet worden gemaakt. Standaard ingesteld op de huidige omgevingsgebruiker. |
--audience |
De doelgroepen waarvoor de JWT moet worden gemaakt. Standaard ingesteld op de URL's die zijn geconfigureerd in het launchSettings.json-bestand van het project. |
--issuer |
De uitgever van de JWT. Wordt standaard ingesteld op dotnet-user-jwts. |
--scope |
Een bereikclaim die moet worden toegevoegd aan de JWT. Specificeer eenmalig voor elke scope. |
--role |
Een rolclaim die moet worden toegevoegd aan de JWT. Geef één keer op voor elke rol. |
--claim |
Claims die moeten worden toegevoegd aan de JWT. Specificeer dit eenmaal voor elke claim in de notatie name=value. |
--not-before |
De UTC-datum en -tijd waarop de JWT geldig wordt, in de notatie yyyy-MM-dd [[HH:mm[[:ss]]]]. De standaardinstelling is de datum en tijd waarop de JWT wordt gemaakt. |
--expires-on |
De UTC-datum en -tijd waarop de JWT verloopt, in de notatie yyyy-MM-dd [[[ [HH:mm]]:ss]]. De standaardwaarde is zes maanden na de --not-before datum. Gebruik deze optie niet met de optie --valid-for. |
--valid-for |
Hoe lang de JWT geldig blijft. Zodra het ingestelde tijdstip is bereikt, verloopt de JWT. Geef een getal op gevolgd door het duurtype (dagen, d uren, h minuten, m seconden), zoals s.365d Gebruik deze optie niet met de optie --expires-on. |
-o \| --output |
De indeling die moet worden gebruikt voor het weergeven van uitvoer van de opdracht: default, tokenof json. |
-h \| --help |
Help-informatie voor de opdracht weergeven. |
Voorbeelden
Voer de volgende opdrachten uit om een leeg webproject te maken en voeg het NuGet-pakket Microsoft.AspNetCore.Authentication.JwtBearer toe:
dotnet new web -o MyJWT
cd MyJWT
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
Vervang de inhoud van het bestand Program.cs door de volgende 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();
In de voorgaande code retourneert een GET-aanvraag naar het /secret eindpunt een 401 Unauthorized fout. Een productie-app kan de JWT ophalen van een beveiligingstokenservice, mogelijk in reactie op aanmelding met referenties. Wanneer u de API gebruikt tijdens lokale ontwikkeling, kan het dotnet user-jwts opdrachtregelprogramma worden gebruikt om app-specifieke lokale JWT's te maken en te beheren.
Het user-jwts hulpprogramma is vergelijkbaar met het hulpprogramma voor gebruikersgeheimen . Deze kan worden gebruikt voor het beheren van waarden voor de app die alleen geldig zijn voor de ontwikkelaar op de lokale computer. Het hulpprogramma maakt gebruik user-jwts van de user-secrets infrastructuur om de sleutel te beheren waarmee de JWT's zijn ondertekend. Deze methode zorgt ervoor dat de sleutel veilig wordt opgeslagen in het gebruikersprofiel.
Het user-jwts hulpprogramma verbergt implementatiedetails, zoals waar en hoe de waarden worden opgeslagen. Het hulpprogramma kan worden gebruikt zonder de implementatiedetails te kennen.
De waarden worden opgeslagen in een JSON-bestand in de gebruikersprofielmap van de lokale computer:
Windows: %APPDATA%\Microsoft\UserSecrets<secrets_GUID>\user-jwts.json
Linux/macOS: ~/.microsoft/usersecrets/<secrets_GUID>/user-jwts.json
Een JWT maken
Met de volgende opdracht maakt u een lokale JWT:
dotnet user-jwts create
Met de voorgaande opdracht wordt een JWT gemaakt en wordt het projectbestand appsettings.Development.json bijgewerkt met JSON, vergelijkbaar met het volgende voorbeeld:
{
"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"
}
}
}
}
Kopieer de JWT en de ID die in de voorgaande opdracht is gemaakt. Gebruik een hulpprogramma zoals Curl om het /secret eindpunt te testen, waarbij {token} de eerder gegenereerde JWT is:
curl -i -H "Authorization: Bearer {token}" https://localhost:{port}/secret
JWT-beveiligingsgegevens weergeven
Met de volgende opdracht worden de JWT-beveiligingsgegevens weergegeven, waaronder de vervaldatum, scopes, rollen, tokenheader en payload, en het compacte token.
dotnet user-jwts print {ID} --show-all
Een token maken voor een specifieke gebruiker en een specifiek bereik
Met de volgende opdracht maakt u een JWT voor een gebruiker met de naam MyTestUser. Zie de create van opdrachten voor de ondersteunde opties.
dotnet user-jwts create --name MyTestUser --scope "myapi:secrets"
De voorgaande opdracht heeft uitvoer die vergelijkbaar is met het volgende voorbeeld:
New JWT saved with ID '43e0b748'.
Name: MyTestUser
Scopes: myapi:secrets
Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.{Remaining token deleted}
Het voorgaande token kan worden gebruikt om het /secret2 eindpunt in de volgende code te 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();