Megosztás a következőn keresztül:


JSON webtokenek kezelése fejlesztés során a dotnet user-jwts használatával

Készítette: Rick Anderson

A dotnet user-jwts parancssori eszköz alkalmazásspecifikus helyi JSON-webjogkivonatokat (JWT-ket ) hozhat létre és kezelhet.

Áttekintés

dotnet user-jwts [<PROJECT>] [command]
dotnet user-jwts [command] -h|--help

Description

Projektre specifikus helyi JSON Web Tokeneket hoz létre és kezel.

Arguments

PROJECT | SOLUTION

Az MSBuild projekt, amelyen parancsot kell alkalmazni. Ha nincs megadva projekt, az MSBuild egy olyan fájl aktuális munkakönyvtárában keres, amely proj végződésű fájlkiterjesztéssel rendelkezik, és ezt a fájlt használja.

Commands

Command Description
átlátszó Egy projekt összes kiadott JWT-jának törlése.
létrehoz Adjon ki egy új JSON-webjogkivonatot.
eltávolít Adott JWT törlése.
kulcs A JWT-k kiállításához használt aláírási kulcs megjelenítése vagy alaphelyzetbe állítása.
list A projekthez kiadott JWT-k listája.
nyomtat Egy adott JWT részleteinek megjelenítése.

Hozz létre

Használat: dotnet user-jwts create [options]

Lehetőség Description
-p | --projekt A projekt útvonala, amelyen működni kíván. Alapértelmezetten a projekt az aktuális könyvtárban lévő projektet veszi figyelembe.
--séma A létrehozott tokenhez használandó sémanév. Alapértelmezés szerint a "Bearer".
-n | --név Annak a felhasználónak a neve, aki számára létre kívánja hozni a JWT-t. Alapértelmezetten az aktuális környezet felhasználójára vonatkozik.
--célközönség A JWT létrehozásához szükséges célközönségek. A projekt launchSettings.jsonkonfigurált URL-címek alapértelmezett értéke.
--kibocsátó A JWT kibocsátója. Alapértelmezés szerint "dotnet-user-jwts".
--hatókör Hatókör-jogcím, amely hozzáadható a JWT-hez. Adjon meg egy-egy hatókört.
--szerep A JWT-hez hozzáadandó szerepkör-jogcím. Határozza meg egyszer minden szerephez.
--igény A JWT-hez hozzáadni kívánt jogcímek. Adjon meg minden egyes igényhez egyszer "name=value" formátumban.
--nem-előtt A JWT nem lehet érvényes a megadott UTC dátum és időpont előtt, amelynek formátuma: 'éééé-HH-nn [[HH:mm[[:ss]]]]'. A JWT létrehozásának dátumára és időpontjára vonatkozó alapértelmezett érték.
--lejárati-dátum A JWT UTC-dátuma és időpontja "éé-MM-dd [[[ [HH:mm]]:ss]]]' formátumban jár le. Alapértelmezés szerint 6 hónappal a --not-before dátum után. Ne használja ezt a lehetőséget a --valid-for beállítással együtt.
--valid-for Az az időszak, amely után a JWT-nek le kell járnia. Adjon meg egy számot, majd a napokra vonatkozó "d" időtartamtípust, a "h" értéket órákra, az "m"-t percekre, az "s"-t pedig másodpercekre, például 365d-et. Ne használja ezt a lehetőséget a --expires-on beállítással együtt.
-o | --kimenet A parancs kimenetének megjelenítéséhez használt formátum. Lehet az egyik "alapértelmezett", "token" vagy "json".
-h | --segítség Súgóinformációk megjelenítése

Példák

Futtassa a következő parancsokat egy üres webes projekt létrehozásához és a Microsoft.AspNetCore.Authentication.JwtBearer NuGet-csomag hozzáadásához:

dotnet new web -o MyJWT
cd MyJWT
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

Cserélje le a Program.cs tartalmát a következő kódra:

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();

Az előző kódban egy GET-kérés /secret hibát ad vissza 401 Unauthorized. Egy produkciós alkalmazás esetleg egy hitelesítési jogkivonat-szolgáltatástól (STS) kapja meg a JWT-t, például bejelentkezéskor a hitelesítő adatok használatával. Az API helyi fejlesztés során történő használatához a parancssori dotnet user-jwts eszköz alkalmazásspecifikus helyi JWT-k létrehozására és kezelésére használható.

Az user-jwts eszköz koncepciója hasonló a felhasználói titkos kódok eszközéhez, és olyan értékek kezelésére használható, amelyek csak a helyi gépen lévő fejlesztő számára érvényesek. Valójában a user-jwts eszköz az infrastruktúrát használja a user-secrets JWT-k által aláírt kulcs kezelésére, biztosítva, hogy az biztonságosan legyen tárolva a felhasználói profilban.

Az user-jwts eszköz elrejti a megvalósítás részleteit, például az értékek tárolásának helyét és módját. Az eszköz a megvalósítás részleteinek ismerete nélkül is használható. Az értékek egy JSON-fájlban vannak tárolva a helyi gép felhasználói profilmappájában:

Fájlrendszer elérési útja:

%APPDATA%\Microsoft\UserSecrets\<secrets_GUID>\user-jwts.json

JWT létrehozása

A következő parancs létrehoz egy helyi JWT-t:

dotnet user-jwts create

Az előző parancs létrehoz egy JWT-t, és az alábbihoz hasonló JSON-fájllal frissíti a projekt fájlját appsettings.Development.json :

{
  "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"
      }
    }
  }
}

Másolja ki a JWT-t és az ID előző parancsban létrehozottat. Használja a Curlhez hasonló eszközt a teszteléshez /secret:

curl -i -H "Authorization: Bearer {token}" https://localhost:{port}/secret

Hol {token} található a korábban létrehozott JWT.

JWT biztonsági információk megjelenítése

Az alábbi parancs megjeleníti a JWT biztonsági adatait, beleértve a lejáratot, a hatóköröket, a szerepköröket, a jogkivonat fejlécét és hasznos adatait, valamint a kompakt jogkivonatot:

dotnet user-jwts print {ID} --show-all

Token létrehozása egy adott felhasználóhoz és hatókörhöz

A támogatott létrehozási lehetőségekről ebben a témakörben a Létrehozás című témakörben olvashat.

A következő parancs létrehoz egy JWT-t egy felhasználó számára:MyTestUser

dotnet user-jwts create --name MyTestUser --scope "myapi:secrets"

Az előző parancs kimenete a következőhöz hasonló:

New JWT saved with ID '43e0b748'.
Name: MyTestUser
Scopes: myapi:secrets

Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.{Remaining token deleted}

Az előző token a /secret2 végpont tesztelésére használható a következő kódban:

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();