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.
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 en dat bestand gebruikt.
Commands
| Command | Description |
|---|---|
| duidelijk | 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 | Geeft een lijst weer van de JWT's die zijn uitgegeven voor het project. |
| De details van een bepaalde JWT weergeven. |
Create
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. |
| --schema | De schemanaam die moet worden gebruikt voor het gegenereerde token. Standaard ingesteld op Bearer. |
| -n | --naam | De naam van de gebruiker waarvoor de JWT moet worden gemaakt. Standaard ingesteld op de huidige omgevingsgebruiker. |
| --doelgroep | De doelgroepen waarvoor de JWT moet worden gemaakt. Standaard ingesteld op de URL's die zijn geconfigureerd in de launchSettings.jsonvan het project. |
| --Uitgevende instelling | De uitgever van de JWT. De standaardwaarde is 'dotnet-user-jwts'. |
| --draagwijdte | Een bereikclaim die moet worden toegevoegd aan de JWT. Specificeer eenmalig voor elke scope. |
| --rol | Een rolclaim die moet worden toegevoegd aan de JWT. Geef één keer op voor elke rol. |
| --aanspraak maken op | Claims die moeten worden toegevoegd aan de JWT. Geef voor elke claim één keer aan met de notatie "name=value". |
| --niet-voor | De UTC-datum en -tijd mag de JWT niet geldig zijn voordat de notatie jjjj-MM-dd [[UU:mm[[:ss]]]] heeft. Standaard ingesteld op de datum en tijd waarop de JWT wordt gemaakt. |
| --verloopt-op | De UTC-datum en -tijd waarop de JWT zou moeten verlopen in het formaat 'jjjj-MM-dd [[[ [HH:mm]]:ss]]'. De standaardwaarde is 6 maanden na de datum --not-before. Gebruik deze optie niet in combinatie met de optie --valid-for. |
| --geldig voor | De periode waarna de JWT zal verlopen. Geef een getal op gevolgd door het duurtype 'd' voor dagen, 'h' voor uren, 'm' voor minuten en 's' voor seconden, bijvoorbeeld 365d. Gebruik deze optie niet in combinatie met de optie --expires-on. |
| -o | --uitvoer | De indeling die moet worden gebruikt voor het weergeven van uitvoer van de opdracht. Dit kan een van de 'standaard', 'token' of 'json' zijn. |
| -h | --Help | Help-informatie 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 Program.cs met 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 resulteert een GET-aanvraag naar /secret in een 401 Unauthorized fout. Een productie-app kan de JWT ophalen van een beveiligingstokenservice (STS), mogelijk als reactie op aanmelden via een set referenties. Voor het werken met de API tijdens lokale ontwikkeling kan het dotnet user-jwts opdrachtregelprogramma worden gebruikt om app-specifieke lokale JWT's te maken en te beheren.
Het hulpprogramma is vergelijkbaar met het hulpprogramma user-jwts. Het kan worden gebruikt om waarden te beheren voor de app die alleen geldig zijn voor de ontwikkelaar op de lokale computer. In feite maakt het hulpprogramma user-jwts gebruik van de infrastructuur voor het user-secrets beheren van de sleutel waarmee de JWT's zijn ondertekend, zodat deze 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:
Bestandssysteempad:
%APPDATA%\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 maakt u een JWT en werkt u het bestand van appsettings.Development.json het project bij met JSON, vergelijkbaar met het volgende:
{
"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 volgende te testen /secret:
curl -i -H "Authorization: Bearer {token}" https://localhost:{port}/secret
Waar {token} is de eerder gegenereerde JWT.
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
Zie Maken in dit onderwerp voor ondersteunde opties voor maken.
Met de volgende opdracht maakt u een JWT voor een gebruiker met de naam MyTestUser:
dotnet user-jwts create --name MyTestUser --scope "myapi:secrets"
De voorgaande opdracht heeft uitvoer die vergelijkbaar is met de volgende:
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();