Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Por Rick Anderson
A dotnet user-jwts ferramenta de linha de comandos pode criar e gerir Tokens Web JSON locais específicos da aplicação (JWTs).
Sinopse
dotnet user-jwts [<PROJECT>] [command]
dotnet user-jwts [command] -h|--help
Description
Cria e gere Tokens Web JSON locais específicos para projetos.
Arguments
PROJECT | SOLUTION
O projeto MSBuild sobre o qual aplicar um comando. Se um projeto não for especificado, o MSBuild procura no diretório de trabalho atual um ficheiro que tenha uma extensão que termine em proj e utiliza esse ficheiro.
Commands
| Command | Description |
|---|---|
| desmarcar | Apague todos os JWTs emitidos para um projeto. |
| criar | Emitir um novo JSON Web Token. |
| remover | Apaga um determinado JWT. |
| chave | Mostrar ou reiniciar a chave de assinatura usada para emitir os JWTs. |
| lista | Lista os JWTs emitidos para o projeto. |
| imprimir | Mostrar os detalhes de um determinado JWT. |
Criar
Utilização: dotnet user-jwts create [options]
| Opção | Description |
|---|---|
| -p | --projeto | O percurso do projeto a seguir. Por predefinição, o projeto é o do diretório atual. |
| --esquema | O nome do esquema a usar para o token gerado. Por defeito, é 'Portador'. |
| -n | --nome | O nome do utilizador para criar o JWT. Por predefinição, corresponde ao utilizador do ambiente atual. |
| --público | Os públicos para criar o JWT. Por padrão, os URLs configurados no launchSettings.json do projeto. |
| --emissor | O emissor do JWT. O valor predefinido é 'dotnet-user-jwts'. |
| --âmbito | Uma alegação de alcance para acrescentar ao JWT. Especifique uma vez para cada escopo. |
| --papel | Uma reivindicação de função para acrescentar ao JWT. Especifique uma vez para cada função. |
| --reivindicação | Declarações a juntar ao JWT. Especifique uma vez para cada declaração no formato "nome=valor". |
| --não antes | A data e hora UTC do JWT não deve ser válida antes no formato 'yyyy-MM-dd [[HH:mm[[:ss]]]]'. Por padrão, corresponde à data e hora em que o JWT é criado. |
| --expira-em | A data e hora UTC do JWT deve expirar no formato 'yyyy-MM-dd [[[ [HH:mm]]:ss]]'. Por padrão, é definido em 6 meses após a data --não antes. Não use esta opção em conjunto com a opção --valid-for. |
| --valid-for | O período após o qual o JWT deve expirar. Especifica usando um número seguido de um tipo de duração, como 'd' para dias, 'h' para horas, 'm' para minutos e 's' para segundos, por exemplo 365d'. Não use esta opção em conjunto com a opção --expires-on. |
| -o | --saída | O formato a usar para mostrar a saída do comando. Pode ser um de 'default', 'token' ou 'json'. |
| -h | --Ajuda | Mostrar informação de ajuda |
Examples
Execute os seguintes comandos para criar um projeto web vazio e adicionar o pacote NuGet Microsoft.AspNetCore.Authentication.JwtBearer :
dotnet new web -o MyJWT
cd MyJWT
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
Substitua o conteúdo do Program.cs pelo seguinte código:
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();
No código anterior, um pedido GET a /secret devolve um erro 401 Unauthorized. Uma aplicação de produção pode obter o JWT através de um serviço de token de segurança (STS), talvez em resposta ao iniciar sessão através de um conjunto de credenciais. Para efeitos de trabalhar com a API durante o desenvolvimento local, a dotnet user-jwts ferramenta de linha de comandos pode ser usada para criar e gerir JWTs locais específicos para aplicações.
A user-jwts ferramenta é semelhante em conceito à ferramenta de segredos de utilizador , podendo ser usada para gerir valores para a aplicação que só são válidos para o programador na máquina local. Na realidade, a ferramenta user-jwts utiliza a user-secrets infraestrutura para gerir a chave com a qual os JWTs são assinados, garantindo que está armazenada de forma segura no perfil do utilizador.
A user-jwts ferramenta esconde detalhes de implementação, como onde e como os valores são armazenados. A ferramenta pode ser usada sem conhecer os detalhes da implementação. Os valores são armazenados em um arquivo JSON na pasta de perfil de usuário da máquina local:
Caminho do sistema de arquivos:
%APPDATA%\Microsoft\UserSecrets\<secrets_GUID>\user-jwts.json
Criar um JWT
O seguinte comando cria um JWT local:
dotnet user-jwts create
O comando anterior cria um JWT e atualiza o ficheiro do appsettings.Development.json projeto com JSON, semelhante ao seguinte:
{
"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 o JWT e o ID criado no comando anterior. Use uma ferramenta como o Curl para testar /secret:
curl -i -H "Authorization: Bearer {token}" https://localhost:{port}/secret
Onde {token} é o JWT previamente gerado.
Mostrar informação de segurança JWT
O comando seguinte apresenta a informação de segurança do JWT, incluindo expiração, escopos, funções, cabeçalho e carga útil do token, e o token compacto:
dotnet user-jwts print {ID} --show-all
Crie um token para um utilizador específico e alcance
Consulte Criar neste tópico para opções de criação suportadas.
O comando seguinte cria um JWT para um utilizador chamado MyTestUser:
dotnet user-jwts create --name MyTestUser --scope "myapi:secrets"
O comando anterior tem uma saída semelhante à seguinte:
New JWT saved with ID '43e0b748'.
Name: MyTestUser
Scopes: myapi:secrets
Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.{Remaining token deleted}
O token anterior pode ser usado para testar o /secret2 endpoint no seguinte código:
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();