Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Par Rick Anderson
L’outil en ligne de commande dotnet user-jwts peut créer et gérer des jetons web JSON (JWT) locaux spécifiques à l’application.
Cet article fournit des détails de syntaxe pour la commande et les exemples.
Synopsis
dotnet user-jwts [<PROJECT>] [command]
dotnet user-jwts [command] -h|--help
Description
Crée et gère des jetons web JSON locaux spécifiques au projet.
Arguments
PROJECT | SOLUTION
Projet MSBuild sur lequel appliquer une commande. Si aucun projet n’est spécifié, MSBuild recherche dans le répertoire de travail actuel un fichier dont l’extension de fichier se termine par proj. Il utilise ensuite ce fichier pour obtenir les informations du projet pour la commande.
Commandes
| Commande | Description |
|---|---|
clear |
Supprimez tous les JWT émis pour un projet. |
create |
Émettez un nouveau jeton web JSON. |
remove |
Supprimez un JWT donné. |
key |
Affichez ou réinitialisez la clé de signature utilisée pour émettre des JWT. |
list |
Répertoriez les JWT émis pour le projet. |
print |
Affichez les détails d’un JWT donné. |
Options de la commande create
Utilisation : dotnet user-jwts create [options]
| Option | Description |
|---|---|
-p \| --project |
Chemin du projet sur lequel effectuer l’opération. Par défaut, le projet est dans le répertoire actif. |
--scheme |
Nom du schéma à utiliser pour le jeton généré. La valeur par défaut est Bearer. |
-n \| --name |
Nom de l’utilisateur pour lequel créer le JWT. Utilise par défaut l’utilisateur de l’environnement actuel. |
--audience |
Les audiences pour lesquelles créer le JWT. Utilise par défaut les URL configurées dans le fichier launchSettings.json du projet. |
--issuer |
Émetteur du JWT. La valeur par défaut est dotnet-user-jwts. |
--scope |
Revendication d’étendue à ajouter au JWT. Spécifiez une fois pour chaque étendue. |
--role |
Revendication de rôle à ajouter au JWT. Spécifiez une fois pour chaque rôle. |
--claim |
Revendications à inclure dans le JWT. Spécifiez une seule fois pour chaque revendication au format name=value. |
--not-before |
Date et heure UTC auxquelles le JWT devient valide, au format yyyy-MM-dd [[HH:mm[[:ss]]]]. Prend par défaut la date et l’heure de création du JWT. |
--expires-on |
Date et heure UTC à laquelle le JWT expire, au format yyyy-MM-dd [[[ [HH:mm]]:ss]]. La valeur par défaut est de six mois après la --not-before date. N’utilisez pas cette option avec l’option --valid-for. |
--valid-for |
Durée pendant laquelle le JWT reste valide. Lorsque l’heure est atteinte, le JWT expire. Spécifiez un nombre suivi d’une unité de temps (d jours, h heures, m minutes, s secondes), par exemple 365d. N’utilisez pas cette option avec l’option --expires-on. |
-o \| --output |
Format à utiliser pour afficher la sortie de la commande : default, tokenou json. |
-h \| --help |
Affichez les informations d’aide pour la commande. |
Exemples
Exécutez les commandes suivantes pour créer un projet web vide et ajouter le package NuGet Microsoft.AspNetCore.Authentication.JwtBearer :
dotnet new web -o MyJWT
cd MyJWT
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
Remplacez le contenu du fichier Program.cs par le code suivant :
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();
Dans le code précédent, une requête GET au /secret point de terminaison retourne une 401 Unauthorized erreur. Une application de production peut obtenir le JWT à partir d’un service de jeton de sécurité, peut-être en réponse à la connexion avec des informations d’identification. Lorsque vous utilisez l’API pendant le développement local, l’outil dotnet user-jwts en ligne de commande peut être utilisé pour créer et gérer des JWT locaux spécifiques à l’application.
L’outil user-jwts est similaire au concept de l’outil de secrets utilisateur . Il peut être utilisé pour gérer les valeurs de l’application valides uniquement pour le développeur sur l’ordinateur local. En fait, l’outil user-jwts utilise l’infrastructure user-secrets pour gérer la clé avec laquelle les JWT sont signés. Cette approche garantit que la clé est stockée en toute sécurité dans le profil utilisateur.
L’outil user-jwts masque les détails de l’implémentation, tels que l’emplacement et la façon dont les valeurs sont stockées. L’outil peut être utilisé sans connaître les détails de l’implémentation.
Les valeurs sont stockées dans un fichier JSON dans le dossier de profil utilisateur de la machine locale :
Windows : %APPDATA%\Microsoft\UserSecrets<secrets_GUID>\user-jwts.json
Linux/macOS : ~/.microsoft/usersecrets/<secrets_GUID/user-jwts.json>
Créer un JWT
La commande suivante crée un JWT local :
dotnet user-jwts create
La commande précédente crée un JWT et met à jour le fichier projet appsettings.Development.json avec JSON similaire à l’exemple suivant :
{
"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"
}
}
}
}
Copiez le JWT et le ID créé dans la commande précédente. Utilisez un outil tel que Curl pour tester le /secret point de terminaison, où {token} est le JWT généré précédemment :
curl -i -H "Authorization: Bearer {token}" https://localhost:{port}/secret
Afficher les informations de sécurité JWT
La commande suivante affiche les informations de sécurité du JWT, notamment la date d’expiration, les périmètres, les rôles, l’en-tête et le contenu du jeton, ainsi que le jeton compact :
dotnet user-jwts print {ID} --show-all
Créer un jeton pour un utilisateur et une étendue spécifiques
La commande suivante crée un JWT pour un utilisateur nommé MyTestUser. Pour connaître les options prises en charge create , consultez la section Options de création de commande .
dotnet user-jwts create --name MyTestUser --scope "myapi:secrets"
La commande précédente a une sortie similaire à l’exemple suivant :
New JWT saved with ID '43e0b748'.
Name: MyTestUser
Scopes: myapi:secrets
Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.{Remaining token deleted}
Le jeton précédent peut être utilisé pour tester le point de terminaison /secret2 dans le code suivant :
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();