Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yazan Rick Anderson
Komut dotnet user-jwts satırı aracı, uygulamaya özgü yerel JSON Web Belirteçleri (JWT) oluşturabilir ve yönetebilir.
Bu makalede, komut ve örnekler için söz dizimi ayrıntıları sağlanır.
Özet
dotnet user-jwts [<PROJECT>] [command]
dotnet user-jwts [command] -h|--help
Açıklama
Projeye özgü yerel JSON Web Belirteçleri oluşturur ve yönetir.
Argümanlar
PROJECT | SOLUTION
Komutun uygulanacağı MSBuild projesi. Bir proje belirtilmezse, MSBuild geçerli çalışma dizininde proj ile biten dosya uzantısına sahip bir dosya arar. Ardından bu dosyayı kullanarak komutun proje bilgilerini alır.
Komutlar
| Komut | Açıklama |
|---|---|
clear |
Bir proje için verilen tüm JWT'leri silin. |
create |
Yeni bir JSON Web Belirteci gönderin. |
remove |
Belirli JWTbir öğesini silin. |
key |
JWT'leri vermek için kullanılan imzalama anahtarını görüntüleyin veya sıfırlayın. |
list |
Proje için verilen JWT'leri listeleyin. |
print |
Belirli JWTbir öğesinin ayrıntılarını görüntüleyin. |
Create komutu için seçenekler
Kullanım: dotnet user-jwts create [options]
| Seçenek | Açıklama |
|---|---|
-p \| --project |
Üzerinde çalışacak projenin yolu. Varsayılan olarak geçerli dizindeki projeyi seçer. |
--scheme |
Oluşturulan belirteç için kullanılacak şema adı. Varsayılan olarak Bearer değerini alır. |
-n \| --name |
Oluşturulacak JWT kullanıcının adı. Varsayılan olarak geçerli ortam kullanıcısını kullanır. |
--audience |
Oluşturulacak JWT hedef kitleler. Projenin launchSettings.json dosyasında yapılandırılan URL'leri varsayılan olarak kullanır. |
--issuer |
verenidir JWT. Varsayılan olarak dotnet-user-jwts değerini alır. |
--scope |
öğesine eklenecek JWTbir kapsam talebi. Her kapsam için bir kez belirtin. |
--role |
öğesine eklenecek JWTbir rol talebi. Her rol için bir kez belirtin. |
--claim |
öğesine eklenecek talepler JWT. Her talep için name=value biçiminde bir kez belirtin. |
--not-before |
biçiminde geçerli yyyy-MM-dd [[HH:mm[[:ss]]]]olduğu UTC tarihi ve saatiJWT. Varsayılan olarak oluşturulduğu tarih ve saat değeridir JWT . |
--expires-on |
UTC tarihi ve saati JWT , biçiminde yyyy-MM-dd [[[ [HH:mm]]:ss]]sona erer. Varsayılan olarak, --not-before tarihinden altı ay sonrasıdır. Bu seçeneği --valid-for seçeneğiyle kullanmayın. |
--valid-for |
Geçerli kalan süre JWT . Süreye ulaşıldığında süresi JWT dolar. Bir sayıyı ve ardından süre türünü (d gün, saat, hm dakika, s saniye) (gibi 365d) belirtin. Bu seçeneği --expires-on seçeneğiyle kullanmayın. |
-o \| --output |
Komutundan çıktı görüntülemek için kullanılacak biçim: default, tokenveya json. |
-h \| --help |
Komutun yardım bilgilerini gösterin. |
Örnekler
Boş bir web projesi oluşturmak ve Microsoft.AspNetCore.Authentication.JwtBearer NuGet paketini eklemek için aşağıdaki komutları çalıştırın:
dotnet new web -o MyJWT
cd MyJWT
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
Program.cs dosyasının içeriğini aşağıdaki kodla değiştirin:
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();
Yukarıdaki kodda, uç noktaya yönelik /secret bir GET isteği bir 401 Unauthorized hata döndürür. Bir üretim uygulaması, kimlik bilgileriyle oturum açmaya yanıt olarak bir Güvenlik belirteci hizmetinden alabilirJWT. Api'yi yerel geliştirme sırasında kullandığınızda, dotnet user-jwts uygulamaya özgü yerel JWT'ler oluşturmak ve yönetmek için komut satırı aracı kullanılabilir.
user-jwts aracı, kavramsal olarak user-secrets aracına benzer. Uygulamanın yalnızca yerel makinedeki geliştirici için geçerli olan değerlerini yönetmek için kullanılabilir. Aslında, user-jwts aracı JWT'lerin imzalanmasında kullanılan anahtarı yönetmek için user-secrets altyapısından yararlanır. Bu yaklaşım anahtarın kullanıcı profilinde güvenli bir şekilde depolanmasını sağlar.
Araç user-jwts , değerlerin nerede ve nasıl depolandığı gibi uygulama ayrıntılarını gizler. Araç, uygulama ayrıntıları bilinmeden kullanılabilir.
Değerler yerel makinenin kullanıcı profili klasöründeki bir JSON dosyasında depolanır:
Windows: \Microsoft\UserSecrets<secrets_GUID\user-jwts.js%APPDATA%>
Linux/macOS: ~/.microsoft/usersecrets/<secrets_GUID>/user-jwts.json
Bir JWT oluştur
Aşağıdaki komut yerel JWTbir oluşturur:
dotnet user-jwts create
Yukarıdaki komut bir oluşturur JWT ve proje appsettings.Development.json dosyasını aşağıdaki örneğe benzer şekilde JSON ile güncelleştirir:
{
"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"
}
}
}
}
JWT önceki komutta ID oluşturulan ve öğesini kopyalayın. Daha önce oluşturulan JWTuç noktayı {token} test /secret etmek için Curl gibi bir araç kullanın:
curl -i -H "Authorization: Bearer {token}" https://localhost:{port}/secret
Güvenlik bilgilerini görüntüleme JWT
Aşağıdaki komut, süre sonu, kapsamlar, roller, belirteç üst bilgisi ve yükü ve sıkıştırılmış belirteç dahil olmak üzere güvenlik bilgilerini görüntüler JWT :
dotnet user-jwts print {ID} --show-all
Belirli bir kullanıcı ve kapsam için belirteç oluşturma
Aşağıdaki komut adlı MyTestUserbir kullanıcı için bir JWT oluşturur. Desteklenen create seçenekler için komut oluşturma seçenekleri bölümüne bakın.
dotnet user-jwts create --name MyTestUser --scope "myapi:secrets"
Yukarıdaki komutun çıktısı aşağıdaki örneğe benzer:
New JWT saved with ID '43e0b748'.
Name: MyTestUser
Scopes: myapi:secrets
Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.{Remaining token deleted}
Yukarıdaki belirteç, aşağıdaki kodda /secret2 uç noktasını test etmek için kullanılabilir:
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();
İlgili içerik
ASP.NET Core