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 |
Afficher 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. 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 de portée à ajouter au JWT. Spécifiez une fois pour chaque étendue. |
--role |
Une réclamation de rôle à ajouter au JWT. Spécifiez une fois pour chaque rôle. |
--claim |
Réclamations à ajouter au JWT. Spécifiez une seule fois pour chaque revendication au format name=value. |
--not-before |
Date et heure UTC à laquelle le JWT devient valide, au format yyyy-MM-dd [[HH:mm[[:ss]]]]. Par défaut, la date et l’heure auxquelles le JWT est créé sont utilisées. |
--expires-on |
Date et heure UTC auxquelles 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 JWT reste valide. Lorsque le délai est atteint, 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. |
Utiliser avec des applications basées sur des fichiers
dotnet user-jwts fonctionne avec les applications basées sur des fichiers via l’option --file . Pointez --file sur le fichier C# de l’application (.cs).
Dans l’exemple suivant, l’application est un fichier nommé app.cs sans fichier projet, et la commande est exécutée dans un interpréteur de commandes à partir du répertoire racine de l’application :
dotnet user-jwts create --file app.cs
L’option --file s’applique à chaque commande user-jwts (create, clear, key, list, print et remove), de la même façon que l’option --project. Lorsque ni --file ni --project n’est spécifié, l’outil recherche dans le répertoire actif un projet MSBuild.
Règlement:
- Le chemin d’accès passé à
--filedoit être un fichier C# avec l’extension de fichier.cs. - Les options
--fileet--projectne peuvent pas être utilisées ensemble.
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 auprès 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 copilote 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 un 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éés 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 JWT informations de sécurité
La commande suivante affiche les JWT informations de sécurité, notamment l’expiration, les étendues, les rôles, l’en-tête de jeton et la charge utile, 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 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();