Uravnoteženje shem avtentikacije za varno usmerjanje
Z razvojem sodobnih spletnih aplikacij se razvijalci pogosto soočajo z izzivom implementacije robustnih mehanizmov za preverjanje pristnosti, ki so varni in prilagodljivi. V vašem primeru uporabljate JWT Bearer Authentication za nekatere poti in Windows Authentication (Negotiate) za druge. Vendar pa se pojavi zapletena težava, ko se obe shemi preverjanja pristnosti uporabljata globalno, kar povzroči zmedo v glavah odgovorov. Natančneje, vidite neželene glave `WWW-Authenticate` za poti JWT, ki vključujejo tako `Bearer` in `Negotiate`, medtem ko bi moral biti prisoten samo `Bearer`.
Za razvijalce, kot ste vi, je ključni cilj zagotoviti, da se vsaka pot odzove s pravilno shemo preverjanja pristnosti. To pomeni, da bi morale poti, zaščitene z JWT pošiljati samo `WWW-Authenticate: Bearer`, poti za preverjanje pristnosti Windows pa samo `WWW-Authenticate: Negotiate`. Predstavljajte si, da gradite spletno aplikacijo z mešanimi uporabniškimi vlogami – nekateri uporabniki preverjajo pristnost s svojimi poverilnicami za Windows, drugi pa z žetoni JWT. Glave morajo biti usklajene s temi različnimi strategijami preverjanja pristnosti, da se izognete zmedi in nepotrebnim varnostnim pozivom.
Toda kaj se zgodi, ko se obe shemi preverjanja pristnosti uporabita na vseh področjih, zaradi česar se obe glavi oglašujeta hkrati? To je lahko frustrirajoče, zlasti če želite imeti natančen nadzor nad tem, kako in kdaj se uporablja posamezna metoda preverjanja pristnosti. Na srečo ASP.NET Core ponuja načine za rešitev te težave in daje razvijalcem, kot ste vi, orodja za uveljavljanje tega natančnega nadzora.
V naslednjih razdelkih bomo raziskali, kako konfigurirati sheme preverjanja pristnosti za določene poti, se izogniti globalni uporabi obeh shem in preprečiti pošiljanje nezaželenih glav `WWW-Authenticate`. Sprehodili se bomo skozi konkretne primere in raziskali najboljše prakse za to konfiguracijo. Na koncu boste jasno razumeli, kako rešiti to težavo in zagotoviti, da se vaša aplikacija obnaša točno tako, kot je predvideno – varno in natančno. 🔒
Ukaz | Primer uporabe |
---|---|
HandleResponse() | Ta metoda se uporablja za preprečevanje privzete obravnave izziva preverjanja pristnosti, kar vam omogoča popoln nadzor nad odzivom. Uporabno je, ko želite prilagoditi način odzivanja na nepooblaščene zahteve, na primer pošiljanje določenega sporočila ali statusne kode. |
AddAuthenticationSchemes() | Ta metoda določa, katere sheme preverjanja pristnosti je treba uporabiti za določen pravilnik. V primeru se uporablja za povezovanje JWT Bearer Authentication ali Windows Authentication (Negotiate) z različnimi potmi ali pravilniki. |
MapControllerRoute() | Preslika poti do dejanj krmilnika v ASP.NET Core. Uporablja se za nastavitev vzorca usmerjanja za različne politike avtentikacije, s čimer se zagotovi, da določene poti obravnava ustrezna metoda avtentikacije. |
OnChallenge | To je obravnavalec dogodkov v razredu JwtBearerEvents, ki vam omogoča prilagajanje vedenja, ko pride do izziva preverjanja pristnosti, kot je prilagajanje odziva 401 Nepooblaščeno. |
UseMiddleware() | Uporablja se za registracijo vmesne programske opreme po meri v cevovodu zahtev aplikacije. To vam omogoča prestrezanje zahtev in odgovorov HTTP, kot je prilagajanje glave WWW-Authenticate glede na zahtevano pot. |
SetRequiredService() | V primeru vmesne programske opreme se ta metoda uporablja za pridobivanje IAuthenticationService iz vsebnika za vstavljanje odvisnosti. Ta storitev je odgovorna za ravnanje z nalogami preverjanja pristnosti, kot sta preverjanje veljavnosti žetonov in upravljanje shem preverjanja pristnosti. |
UseEndpoints() | Ta metoda konfigurira končne točke za usmerjanje v ASP.NET Core. Uporablja se za določanje, kako naj določene poti obravnavajo krmilniki in kateri pravilniki naj veljajo. |
RequireAuthenticatedUser() | Ta metoda zagotavlja, da mora biti uporabnik overjen za dostop do poti, zaščitene s pravilnikom avtorizacije. Uporablja se v definiciji pravilnika za uveljavljanje avtentikacije na poteh, ki to zahtevajo. |
SymmetricSecurityKey() | Ta metoda ustvari simetrični ključ, ki se uporablja za podpisovanje in preverjanje žetonov JWT. Bistvenega pomena je za zagotavljanje celovitosti in pristnosti žetonov. |
Pregled rešitve: Konfiguriranje shem preverjanja pristnosti za določene poti
V kontekstu ASP.NET Core je lahko upravljanje shem za preverjanje pristnosti težavno, zlasti če imate več shem, kot sta JWT Bearer Authentication in Windows Authentication (Negotiate), ki tečejo vzporedno. Za rešitev težave z nasprotujočimi si glavami WWW-Authenticate uporabljamo kombinacijo konfiguracije vmesne programske opreme, avtorizacije na podlagi pravilnika in ravnanja z odzivi po meri. Ta rešitev vključuje nastavitev dveh različnih shem za preverjanje pristnosti, ki se selektivno uporabljata za različne poti. Zamisel je zagotoviti, da se vsaka pot odzove samo s potrebno glavo za preverjanje pristnosti – JWT za poti, zaščitene z JWT, in Negotiate za poti, zaščitene s preverjanjem pristnosti Windows. 🚀
Prvi kritični del rešitve je nastavitev shem za preverjanje pristnosti. V datoteki `Program.cs` konfiguriramo JWT Bearer Authentication in Windows Authentication. Za JWT smo nastavili metodo `AddJwtBearer` s potrebnimi konfiguracijami, kot so `Issuer`, `Audience` in `IssuerSigningKey`. Pomembna stvar pri tem je obravnavalec dogodkov, definiran v `OnChallenge`, ki nam omogoča, da zavrnemo privzeto glavo WWW-Authenticate. To nam daje nadzor nad tem, kako se obravnavajo nepooblaščeni odgovori 401. Zagotavljamo tudi, da je odziv prilagojen s sporočilom JSON, ki signalizira, da je uporabnik nepooblaščen.
Nato dodamo shemo Preverjanje pristnosti Windows z `AddNegotiate()`. To nastavi protokol HTTP Negotiate, ki se uporablja za preverjanje pristnosti uporabnikov sistema Windows. Obe shemi preverjanja pristnosti povezujemo z ločenima avtorizacijskima pravilnikoma. Ti pravilniki so opredeljeni v metodi `AddAuthorization()`, kjer dodamo pravilnik po meri za vsako shemo preverjanja pristnosti. Na primer, `JwtAuthPolicy` izrecno doda `JwtBearerDefaults.AuthenticationScheme`, podobno pa `WinAuthPolicy` doda `NegotiateDefaults.AuthenticationScheme`. To je ključno za pravilno usmerjanje avtentikacije na podlagi mehanizma zaščite poti. 💡
Po nastavitvi uporabimo atributa `[Authorize(Policy = "JwtAuthPolicy")]` in `[Authorize(Policy = "WinAuthPolicy")]` za okrasitev poti. To zagotavlja, da vsaka pot sledi svojemu določenemu mehanizmu za preverjanje pristnosti. Vendar se še vedno soočamo s težavo, pri kateri bi se lahko obe shemi preverjanja pristnosti uporabljali globalno. Da bi to rešili, moramo prilagoditi tok vmesne programske opreme in selektivno obravnavati glave WWW-Authenticate z uporabo metode `HandleResponse()` znotraj dogodka `OnChallenge`. To zagotavlja, da se, ko je pot zavarovana z JWT, uporabi glava WWW-Authenticate: Bearer, za poti Windows Authentication pa se pošlje samo glava Negotiate.
Celoten tok je učinkovit in varen, ker uporabljamo najboljše prakse, kot sta preverjanje veljavnosti žetonov in obravnavanje napak. Z nastavitvijo pravilnikov, shem preverjanja pristnosti in prilagajanjem odgovorov na izzive zagotavljamo, da so glave preverjanja pristnosti strogo vezane na ustrezne poti. S temi nastavitvami lahko razvijalci samozavestno upravljajo različne sheme preverjanja pristnosti v eni sami aplikaciji ASP.NET Core brez povzročanja nepotrebnih konfliktov. Ta pristop izboljša uporabniško izkušnjo z zagotavljanjem samo ustrezne glave WWW-Authenticate za vsako zaščiteno pot. 🛠️
Pristop 1: Spreminjanje avtentikacije z vmesno programsko opremo po meri
Ta rešitev uporablja vmesno programsko opremo po meri za omejevanje preverjanja pristnosti nosilca JWT in preverjanja pristnosti sistema Windows (pogajanje) na določene poti v ozadju ASP.NET Core. Vmesna programska oprema zagotavlja, da je vključena le ustrezna glava WWW-Authenticate glede na zahteve za preverjanje pristnosti poti.
public class AuthenticationSchemeMiddleware
{
private readonly RequestDelegate _next;
public AuthenticationSchemeMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
var path = context.Request.Path;
var authentication = context.RequestServices.GetRequiredService<IAuthenticationService>();
if (path.StartsWithSegments("/api/jwt"))
{
context.Request.Headers["Authorization"] = "Bearer <your-token>";
}
else if (path.StartsWithSegments("/api/windows"))
{
context.Request.Headers["Authorization"] = "Negotiate";
}
await _next(context);
}
}
public static class AuthenticationSchemeMiddlewareExtensions
{
public static IApplicationBuilder UseAuthenticationSchemeMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<AuthenticationSchemeMiddleware>();
}
}
public void Configure(IApplicationBuilder app)
{
app.UseAuthenticationSchemeMiddleware();
app.UseAuthentication();
app.UseAuthorization();
}
Pristop 2: Avtorizacija na podlagi pravilnika z natančnim nadzorom
Ta rešitev uporablja pooblastitvene pravilnike za ločeno konfiguracijo shem preverjanja pristnosti za različne poti v ASP.NET Core. Pravilniki vam omogočajo, da uporabite JWT Bearer Authentication ali Windows Authentication selektivno glede na pot.
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Issuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(builder.Configuration["Jwt:Key"]))
};
})
.AddNegotiate();
services.AddAuthorization(options =>
{
options.AddPolicy("JwtAuthPolicy", policy =>
{
policy.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme);
policy.RequireAuthenticatedUser();
});
options.AddPolicy("WinAuthPolicy", policy =>
{
policy.AddAuthenticationSchemes(NegotiateDefaults.AuthenticationScheme);
policy.RequireAuthenticatedUser();
});
});
}
public void Configure(IApplicationBuilder app)
{
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapControllerRoute(
name: "jwt",
pattern: "api/jwt/{action}",
defaults: new { controller = "Jwt" });
endpoints.MapControllerRoute(
name: "windows",
pattern: "api/windows/{action}",
defaults: new { controller = "Windows" });
});
}
Pristop 3: Pogojna glava WWW-avtentikacije na podlagi poti
Pri tem pristopu je ASP.NET Core konfiguriran tako, da vključuje samo ustrezno glavo `WWW-Authenticate`, ki temelji na poti, tako da prestreže odgovor in pogojno prilagodi glavo. Ta metoda uporablja vmesno programsko opremo za večjo prilagodljivost pri nadzoru glav.
public class AuthenticationHeaderMiddleware
{
private readonly RequestDelegate _next;
public AuthenticationHeaderMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
var path = context.Request.Path;
await _next(context);
if (path.StartsWithSegments("/api/jwt"))
{
context.Response.Headers["WWW-Authenticate"] = "Bearer";
}
else if (path.StartsWithSegments("/api/windows"))
{
context.Response.Headers["WWW-Authenticate"] = "Negotiate";
}
}
}
public static class AuthenticationHeaderMiddlewareExtensions
{
public static IApplicationBuilder UseAuthenticationHeaderMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<AuthenticationHeaderMiddleware>();
}
}
public void Configure(IApplicationBuilder app)
{
app.UseAuthenticationHeaderMiddleware();
app.UseAuthentication();
app.UseAuthorization();
}
Optimizacija avtentikacije z JWT in Windows avtentikacijo v ASP.NET Core
V ASP.NET Core upravljanje več shem za preverjanje pristnosti, kot sta JWT Bearer in Windows Authentication (Negotiate), zahteva skrbno konfiguracijo, da zagotovite, da se pravilna shema uporablja za določene poti. Pogosta težava, s katero se soočajo razvijalci, je privzeta uporaba vseh globalno konfiguriranih shem za preverjanje pristnosti, kar lahko povzroči vključitev neželenih glav WWW-Authenticate v odzive HTTP. To je še posebej problematično, če želite, da Poti JWT vključujejo samo glavo Nosilca in Poti Windows Authentication vključijo samo glavo Negotiate. S prilagajanjem konfiguracije preverjanja pristnosti in uporabo pravilnikov lahko nadzirate, katera shema preverjanja pristnosti se uporablja za vsako pot, in preprečite navzkrižja v glavah odgovorov. 🔐
Eno najmočnejših orodij, ki so vam na voljo, je avtorizacijski sistem na podlagi pravilnika v ASP.NET Core. Z definiranjem posebnih pravilnikov za vsako shemo preverjanja pristnosti lahko zagotovite, da je vsaka pot zaščitena s pravilnim mehanizmom. Na primer, pot, ki zahteva preverjanje pristnosti nosilca JWT, bi uporabljala `JwtAuthPolicy`, ki uveljavi, da se uporablja samo shema nosilca, medtem ko bi bila pot, ki zahteva preverjanje pristnosti sistema Windows, zavarovana z `WinAuthPolicy`. Ta pristop naredi aplikacijo bolj prilagodljivo, saj vam omogoča, da varnostne politike prilagodite različnim potem znotraj iste aplikacije. Če želite natančno prilagoditi glavo WWW-Authenticate, lahko tudi prilagodite dogodek `OnChallenge` v konfiguraciji JWT, da preprečite privzete glave in zagotovite, da je v odgovor vključena samo ustrezna glava.
Poleg nastavitve teh shem in pravilnikov za preverjanje pristnosti je pomembno razumeti, kako vmesna programska oprema deluje v tem procesu. Vmesni program `UseAuthentication` in `UseAuthorization` morata biti skrbno postavljeni v cevovod, da se zagotovi obdelava pravilne sheme preverjanja pristnosti, preden vsaka zahteva doseže svojo pot. Če definirate to vmesno programsko opremo in jo strukturirate s pravim zaporedjem, se lahko izognete konfliktom med shemami. Ta pristop ne samo izboljša varnost vaše aplikacije, ampak tudi optimizira uporabniško izkušnjo z zagotavljanjem, da se za vsako zahtevo uporabi samo potrebna shema preverjanja pristnosti. 🌐
Pogosta vprašanja o JWT in preverjanju pristnosti sistema Windows v ASP.NET Core
- Kaj je namen metode `AddJwtBearer` v ASP.NET Core?
- The AddJwtBearer metoda se uporablja za konfiguracijo avtentikacije nosilca JWT v ASP.NET Core. Omogoča vam, da določite, kako se preverjajo žetoni JWT, vključno z nastavitvijo parametrov, kot so izdajatelj žetona, občinstvo in ključ za podpisovanje. To je bistvenega pomena za zaščito API-jev z žetoni JWT, kar zagotavlja, da lahko samo overjeni uporabniki dostopajo do zaščitenih virov.
- Kako lahko zatrem privzeto glavo WWW-Authenticate v JWT?
- Z ravnanjem z OnChallenge dogodka v konfiguraciji nosilca JWT, lahko zavrnete privzeto glavo WWW-Authenticate. To storite s klicem context.HandleResponse(), ki prepreči privzeto vedenje, nato pa ročno nastavite odziv po meri, kot je pošiljanje statusne kode 401 s sporočilom o napaki JSON.
- Kaj počne metoda `AddNegotiate()` v kontekstu preverjanja pristnosti ASP.NET Core?
- The AddNegotiate() metoda konfigurira preverjanje pristnosti sistema Windows z uporabo protokola Negotiate. To aplikaciji omogoča preverjanje pristnosti uporabnikov na podlagi poverilnic za Windows, običajno za poslovna okolja, kjer so uporabniki že prijavljeni v domeno Windows.
- Kako uporabim več shem za preverjanje pristnosti za različne poti?
- Pooblastilo na podlagi pravilnika lahko uporabite za uporabo posebnih shem preverjanja pristnosti za različne poti. Na primer, lahko definirate a JwtAuthPolicy za zaščitene poti JWT in a WinAuthPolicy za poti, zaščitene s preverjanjem pristnosti sistema Windows. Nato z uporabo [Authorize(Policy = "PolicyName")] lahko vsako pot povežete z ustrezno shemo preverjanja pristnosti.
- Zakaj je pomembno prilagoditi glavo `WWW-Authenticate`?
- Prilagajanje WWW-Authenticate header zagotavlja, da je odjemalcu oglašena samo ustrezna metoda preverjanja pristnosti. Na primer, ne želite, da poti JWT predlagajo metodo Negotiate, kar bi lahko zmedlo stranko ali povzročilo nepotrebne pozive za preverjanje pristnosti. Ta prilagoditev pomaga optimizirati varnost in izboljšati uporabniško izkušnjo z zagotavljanjem jasnejšega poteka preverjanja pristnosti.
- Kako avtorizacija na podlagi pravilnika pomaga pri upravljanju več shem za preverjanje pristnosti?
- Avtorizacija na podlagi pravilnika vam omogoča, da definirate pravilnike avtorizacije po meri za različne poti, vsaka s posebno shemo preverjanja pristnosti. Zaradi tega je vaša koda bolj prilagodljiva in vzdržljiva z ločevanjem pomislekov in zagotavljanjem uporabe pravih varnostnih ukrepov za vsako pot. Za vsako pot lahko definirate različne sheme in zahteve, s čimer zagotovite, da se za ustrezne vire uporabi pravilen mehanizem.
- Ali je mogoče dogodek `OnChallenge` v konfiguraciji JWT uporabiti za druge sheme preverjanja pristnosti?
- Da, OnChallenge dogodek se lahko uporablja tudi za prilagoditev odziva na izzive avtentikacije v drugih shemah. Uporabite ga lahko na primer za prilagajanje vedenja sheme preverjanja pristnosti Negotiate tako, da onemogočite privzete glave ali spremenite sporočila o napakah, ki se vrnejo odjemalcu. Ta dogodek ponuja zmogljiv način za nadzor izzivov pri preverjanju pristnosti.
- Kakšna je vloga vmesne programske opreme `UseAuthentication` v ASP.NET Core?
- The UseAuthentication vmesna programska oprema se uporablja za omogočanje preverjanja pristnosti v aplikaciji ASP.NET Core. Zagotavlja, da se dohodne zahteve preverijo glede veljavnih žetonov ali poverilnic za preverjanje pristnosti. To vmesno programsko opremo je treba dodati pred UseAuthorization vmesno programsko opremo za pravilno avtentikacijo uporabnika, preden izvede kakršna koli avtorizacijska preverjanja.
- Kako konfiguriram preverjanje pristnosti in avtorizacijo za API-je v ASP.NET Core?
- Če želite konfigurirati preverjanje pristnosti in avtorizacijo za API-je, morate uporabiti AddAuthentication in AddAuthorization metode v datoteki `Program.cs`. Te metode nastavijo avtentikacijske sheme (kot sta JWT in Negotiate) in definirajo pravilnike, ki določajo, katere poti morajo biti zaščitene s katero avtentikacijsko shemo. Nato uporabite [Authorize] atribut za zavarovanje vaših poti.
- Kakšne so prednosti uporabe avtentikacije nosilca JWT v spletnih API-jih?
- JWT Bearer Authentication je metoda preverjanja pristnosti brez stanja, ki zagotavlja razširljiv in varen način za preverjanje pristnosti uporabnikov brez vzdrževanja stanja seje na strežniku. Še posebej je uporaben za API-je, ker uporabnikom omogoča preverjanje pristnosti z žetonom, ki ga je mogoče enostavno posredovati v zahtevah HTTP, zaradi česar je idealen za sodobne spletne aplikacije in mobilne odjemalce.
Ko gradite aplikacijo ASP.NET Core z obema Preverjanje pristnosti nosilca JWT in Preverjanje pristnosti sistema Windows, je lahko upravljanje teh shem za preverjanje pristnosti zahtevno. Cilj je omejiti WWW-preverjanje pristnosti za prikaz samo ustrezne sheme glede na pot. Z definiranjem pravilnikov avtorizacije po meri in ravnanjem z OnChallenge dogodka, lahko razvijalci učinkovito nadzirajo glave odgovorov in zagotovijo, da se vsaka shema preverjanja pristnosti uporablja samo tam, kjer je primerno. Ta pristop povečuje varnost in uporabniško izkušnjo, zlasti v scenarijih, kjer je potrebnih več mehanizmov za preverjanje pristnosti.
Zagotavljanje ustreznih glav za preverjanje pristnosti za določene poti
V sodobni aplikaciji ASP.NET Core lahko nadzor nad shemami za preverjanje pristnosti, kot sta JWT in Windows Authentication za različne poti, vodi do čistejših in varnejših izvedb. Ključni izziv pri tem je zagotoviti, da WWW-preverjanje pristnosti glave samo oglašujejo ustrezno metodo preverjanja pristnosti za vsako pot. S pravilno konfiguracijo shem za preverjanje pristnosti in prilagajanjem glav odgovorov za vsako pot lahko odpravite konflikte in izboljšate varnost vaše aplikacije. 🌐
V vašem primeru rešitev vključuje uporabo avtorizacijskih pravilnikov po meri za JWT in Windows Authentication. S pomočjo teh pravilnikov lahko nadzirate, katero shemo preverjanja pristnosti je treba uporabiti na podlagi posamezne poti. Z zatiranjem privzetega WWW-preverjanje pristnosti glavo skozi OnChallenge dogodka v vaši konfiguraciji JWT, lahko odziv prilagodite tako, da prikaže samo glavo nosilca za poti JWT in glavo pogajanja za poti za preverjanje pristnosti Windows. Ta pristop zagotavlja, da je v odgovoru poslana samo ustrezna glava, kar poenostavi postopek preverjanja pristnosti in izboljša uporabniško izkušnjo. 🔒
Z uporabo teh tehnik lahko dosežete čistejši potek preverjanja pristnosti za svoje uporabnike in se izognete nepotrebnim pozivom za preverjanje pristnosti. Poleg tega zagotavlja boljši nadzor nad varnostnim položajem vaše aplikacije. To je odličen primer, kako natančno prilagajanje avtentikacije v ASP.NET Core omogoča bolj prilagojene, robustne in varne spletne aplikacije. 💻
Viri in reference
- Za globlji potop v konfiguracijo preverjanja pristnosti v ASP.NET Core glejte uradno Microsoftovo dokumentacijo na Preverjanje pristnosti ASP.NET Core .
- Za navodila o uporabi avtentikacije nosilca JWT in ravnanju z več shemami si oglejte ta obsežen vodnik o Preverjanje pristnosti nosilca JWT v ASP.NET Core .
- Za več podrobnosti o preverjanju pristnosti sistema Windows in shemi pogajanj si oglejte dokumentacijo na Preverjanje pristnosti sistema Windows v ASP.NET Core .