Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Por Rick Anderson
La herramienta de línea de comandos dotnet user-jwts puede crear y administrar tokens web JSON (JWT) locales específicos de la aplicación.
En este artículo se proporcionan detalles de sintaxis para el comando y ejemplos.
Sinopsis
dotnet user-jwts [<PROJECT>] [command]
dotnet user-jwts [command] -h|--help
Descripción
Crea y administra tokens web JSON locales específicos del proyecto.
Argumentos
PROJECT | SOLUTION
Proyecto de MSBuild en el que se va a aplicar un comando. Si no se especifica un proyecto, MSBuild busca en el directorio de trabajo actual un archivo que tiene una extensión de archivo que termina en proj. A continuación, usa ese archivo para obtener la información del proyecto para el comando .
Comandos:
| Comando | Descripción |
|---|---|
clear |
Eliminar todos los JWT emitidos para un proyecto. |
create |
Emitir un nuevo JSON Web Token. |
remove |
Elimine un JWT. |
key |
Mostrar o restablecer la clave de firma usada para emitir JWT. |
list |
Enumere los JWT emitidos para el proyecto. |
print |
Muestra los detalles de un determinado JWT. |
Opciones para el comando create
Uso: dotnet user-jwts create [options]
| Opción | Descripción |
|---|---|
-p \| --project |
La ruta de acceso del proyecto sobre el que actuar. El valor predeterminado es el proyecto en el directorio actual. |
--scheme |
Nombre del esquema que se va a usar para el token generado. Tiene como valor predeterminado Bearer. |
-n \| --name |
Nombre del usuario para el que se va a crear el JWT. El valor predeterminado es el usuario del entorno actual. |
--audience |
Las audiencias para las que se va a crear el JWT. Usa de forma predeterminada las URL configuradas en el archivo launchSettings.json del proyecto. |
--issuer |
El emisor del JWT. Tiene como valor predeterminado dotnet-user-jwts. |
--scope |
Una notificación de ámbito que se agrega al JWT. Especifique una vez para cada ámbito. |
--role |
Una notificación de rol que se agrega al JWT. Especifique una vez por cada rol. |
--claim |
Notificaciones que se agregan al JWT. Especifique una vez por cada declaración en el formato name=value. |
--not-before |
Fecha y hora UTC en la que JWT pasa a ser válido, en el formato yyyy-MM-dd [[HH:mm[[:ss]]]]. El valor predeterminado es la fecha y hora en que se crea el JWT. |
--expires-on |
Fecha y hora UTC en la que caduca JWT, en el formato yyyy-MM-dd [[[ [HH:mm]]:ss]]. De forma predeterminada, se establece en seis meses después de la fecha --not-before. No utilice esta opción con la opción --valid-for. |
--valid-for |
La cantidad de tiempo que JWT permanece válida. Cuando se alcanza el tiempo, el JWT expira. Especifique un número seguido del tipo de duración (d días, horas, hm minutos, s segundos), como 365d. No utilice esta opción con la opción --expires-on. |
-o \| --output |
Formato que se va a usar para mostrar la salida del comando: default, tokeno json. |
-h \| --help |
Mostrar información de ayuda para el comando. |
Uso con aplicaciones basadas en archivos
dotnet user-jwts funciona con aplicaciones basadas en archivos a través de la --file opción . Apunte --file al archivo C# de la aplicación (.cs).
En el ejemplo siguiente, la aplicación es un archivo denominado app.cs sin un archivo de proyecto y el comando se ejecuta en un shell de comandos desde el directorio raíz de la aplicación:
dotnet user-jwts create --file app.cs
La opción --file se aplica a todos los comandos user-jwts (create, clear, list, key, print y remove), de la misma manera que lo hace la opción --project. Cuando no se especifica ni --file ni --project, la herramienta busca en el directorio actual un proyecto de MSBuild.
Reglas:
- La ruta de acceso pasada a
--filedebe ser un archivo de C# con la.csextensión de archivo. - Las opciones
--filey--projectno se pueden usar juntas.
Ejemplos
Ejecute los siguientes comandos para crear un proyecto web vacío y agregar el paquete NuGet Microsoft.AspNetCore.Authentication.JwtBearer:
dotnet new web -o MyJWT
cd MyJWT
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
Reemplace el contenido del archivo Program.cs por el código siguiente:
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();
En el código anterior, una solicitud GET al /secret punto de conexión devuelve un 401 Unauthorized error. Una aplicación de producción podría obtener el JWT de un servicio de token de seguridad, quizás en respuesta a iniciar sesión con credenciales. Cuando se usa la API durante el desarrollo local, se puede usar la dotnet user-jwts herramienta de línea de comandos para crear y administrar JWT locales específicos de la aplicación.
La user-jwts herramienta es similar en concepto a la herramienta de secretos de usuario . Se puede usar para administrar los valores de la aplicación que solo son válidos para el desarrollador en el equipo local. De hecho, la user-jwts herramienta utiliza la user-secrets infraestructura para administrar la clave con la que se firman los JWT. Este enfoque garantiza que la clave se almacena de forma segura en el perfil de usuario.
La herramienta user-jwts oculta los detalles de implementación, como dónde y cómo se almacenan los valores. La herramienta se puede usar sin conocer los detalles de implementación.
Los valores se almacenan en un archivo JSON en la carpeta de perfil de usuario de la máquina local:
Windows: %APPDATA%\Microsoft\UserSecrets<secrets_GUID>\user-jwts.json
Linux/macOS: ~/.microsoft/usersecrets/<secrets_GUID>/user-jwts.json
Crear un JWT
El siguiente comando crea un JWT local:
dotnet user-jwts create
El comando anterior crea un JWT y actualiza el archivo de proyecto appsettings.Development.json con JSON similar al ejemplo siguiente:
{
"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"
}
}
}
}
Copie el JWT y el ID creados en el comando anterior. Usa una herramienta como Curl para probar el /secret punto de conexión, donde {token} es el JWT generado anteriormente:
curl -i -H "Authorization: Bearer {token}" https://localhost:{port}/secret
Mostrar información de seguridad JWT
El siguiente comando muestra la JWT información de seguridad, incluida la expiración, los ámbitos, los roles, el encabezado del token y el payload, y el token compacto:
dotnet user-jwts print {ID} --show-all
Crear un token para un usuario y un ámbito específicos
El comando siguiente crea un JWT para un usuario denominado MyTestUser. Para ver las opciones admitidas create , consulte la sección Opciones para el comando create .
dotnet user-jwts create --name MyTestUser --scope "myapi:secrets"
El comando anterior tiene una salida similar a la del ejemplo siguiente:
New JWT saved with ID '43e0b748'.
Name: MyTestUser
Scopes: myapi:secrets
Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.{Remaining token deleted}
El token anterior se puede usar para probar el punto de conexión de /secret2 en el código siguiente:
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();