Windowsi autentimise ja JWT piiramine konkreetsete marsruutidega ASP.NET Core'is

Temp mail SuperHeros
Windowsi autentimise ja JWT piiramine konkreetsete marsruutidega ASP.NET Core'is
Windowsi autentimise ja JWT piiramine konkreetsete marsruutidega ASP.NET Core'is

Autentimisskeemide tasakaalustamine turvaliseks marsruutimiseks

Kaasaegsete veebirakenduste arenedes seisavad arendajad sageli silmitsi väljakutsega rakendada tugevaid autentimismehhanisme, mis on nii turvalised kui ka paindlikud. Teie puhul kasutate mõne marsruudi puhul JWT kandja autentimist ja teiste jaoks Windowsi autentimist (läbirääkimisi). Kui mõlemat autentimisskeemi rakendatakse globaalselt, tekib aga keeruline probleem, mis põhjustab vastuse päistes segadust. Täpsemalt näete soovimatuid päiseid "WWW-Authenticate" JWT marsruutidele, mis sisaldavad nii "kandjat" kui ka "läbirääkimisi", samas kui kohal peaks olema ainult "kandja".

Teiesuguste arendajate jaoks on peamine eesmärk tagada, et iga marsruut vastab õige autentimisskeemiga. See tähendab, et JWT-ga kaitstud marsruudid peaksid saatma ainult "WWW-Authenticate: Bearer" ja Windowsi autentimise marsruudid peaksid saatma ainult "WWW-Authenticate: Negotiate". Kujutage ette, et loote erinevate kasutajarollidega veebirakendust – mõned kasutajad autentivad oma Windowsi mandaatide kaudu, teised aga JWT-lubadega. Päised peaksid olema vastavuses nende erinevate autentimisstrateegiatega, et vältida segadust ja tarbetuid turvaviipasid.

Mis juhtub aga siis, kui mõlemat autentimisskeemi rakendatakse kõikjal, mille tulemusel reklaamitakse mõlemat päist korraga? See võib olla masendav, eriti kui soovite omada täpset kontrolli selle üle, kuidas ja millal iga autentimismeetodit rakendatakse. Õnneks pakub ASP.NET Core viise selle probleemi lahendamiseks, andes teiesugustele arendajatele tööriistad selle täpse kontrolli jõustamiseks.

Järgmistes jaotistes uurime, kuidas konfigureerida autentimisskeeme konkreetsete marsruutide jaoks, vältides mõlema skeemi globaalset rakendamist ja vältides soovimatute päiste "WWW-Authenticate" saatmist. Tutvustame konkreetseid näiteid ja uurime selle konfiguratsiooni parimaid tavasid. Lõpuks saate selgelt aru, kuidas seda probleemi lahendada ja tagada, et teie rakendus käitub täpselt nii, nagu ette nähtud – turvaliselt ja täpselt. 🔒

Käsk Kasutusnäide
HandleResponse() Seda meetodit kasutatakse autentimise väljakutse vaikimisi käsitlemise vältimiseks, võimaldades teil vastust täielikult kontrollida. See on kasulik, kui soovite kohandada volitamata päringutele vastamise viisi, näiteks konkreetse sõnumi või olekukoodi saatmist.
AddAuthenticationSchemes() See meetod määrab, milliseid autentimisskeeme tuleks konkreetsele poliitikale rakendada. Näites kasutatakse seda JWT kandja autentimise või Windowsi autentimise (läbirääkimiste) seostamiseks erinevate marsruutide või poliitikatega.
MapControllerRoute() Kaardistab marsruudid kontrolleri toiminguteni ASP.NET Core'is. Seda kasutatakse erinevate autentimispoliitikate marsruutimismustri määramiseks, tagades, et konkreetseid marsruute käsitletakse sobiva autentimismeetodiga.
OnChallenge See on JwtBearerEvents klassi sündmuste käitleja, mis võimaldab teil kohandada käitumist autentimisprobleemide ilmnemisel, näiteks kohandada 401 volitamata vastust.
UseMiddleware() Kasutatakse kohandatud vahevara registreerimiseks rakenduse päringukonveieris. See võimaldab teil pealt kuulata HTTP-päringuid ja vastuseid, näiteks kohandada päist WWW-Authenticate soovitud marsruudi alusel.
SetRequiredService() Vahevara näites kasutatakse seda meetodit IAuthenticationService hankimiseks sõltuvuse sisestamise konteinerist. See teenus vastutab autentimisülesannete haldamise eest, nagu žetoonide valideerimine ja autentimisskeemide haldamine.
UseEndpoints() See meetod konfigureerib ASP.NET Core'i marsruutimise lõpp-punktid. Seda kasutatakse selleks, et määrata, kuidas kontrollerid peaksid konkreetseid marsruute käsitlema ja millised poliitikad peaksid kehtima.
RequireAuthenticatedUser() See meetod tagab, et kasutaja peab olema autentitud, et pääseda ligi autoriseerimispoliitikaga kaitstud marsruudile. Seda kasutatakse poliitika määratluses autentimise jõustamiseks marsruutidel, mis seda nõuavad.
SymmetricSecurityKey() See meetod loob sümmeetrilise võtme, mida kasutatakse JWT-märkide allkirjastamiseks ja kinnitamiseks. See on oluline žetoonide terviklikkuse ja autentsuse tagamiseks.

Lahenduse ülevaade: konkreetsete marsruutide autentimisskeemide konfigureerimine

ASP.NET Core'i kontekstis võib autentimisskeemide haldamine olla keeruline, eriti kui teil töötab paralleelselt mitu skeemi, nagu JWT kandja autentimine ja Windows Authentication (läbirääkimised). Vastuoluliste WWW-Authenticate päiste probleemi lahendamiseks kasutame vahevara konfiguratsiooni, poliitikapõhise autoriseerimise ja kohandatud vastuste käsitlemise kombinatsiooni. See lahendus hõlmab kahe erineva autentimisskeemi seadistamist, mida rakendatakse valikuliselt erinevatele marsruutidele. Idee on tagada, et iga marsruut vastab ainult vajaliku autentimispäisega – JWT JWT-ga kaitstud marsruutidele ja läbirääkimised Windowsi autentimisega kaitstud marsruutidega. 🚀

Lahenduse esimene kriitiline osa on autentimisskeemide seadistamine. Failis "Program.cs" konfigureerime JWT kandja autentimise ja Windowsi autentimise. JWT jaoks seadistame meetodi "AddJwtBearer" koos vajalike seadistustega, nagu "Issuer", "Audience" ja "IssuerSigningKey". Siin on oluline 'OnChallenge'is' määratletud sündmuste käitleja, mis võimaldab meil vaikimisi WWW-Authenticate päise maha suruda. See annab meile kontrolli selle üle, kuidas 401 volitamata vastuseid käsitletakse. Samuti tagame, et vastus on kohandatud JSON-sõnumiga, mis annab märku, et kasutaja on volitamata.

Järgmisena lisame Windowsi autentimise skeemi koos käsuga "AddNegotiate()". See seadistab protokolli HTTP Negotiate, mida kasutatakse Windowsi kasutajate autentimiseks. Seome mõlemad autentimisskeemid eraldi autoriseerimispoliitikatega. Need eeskirjad on määratletud meetodis "AddAuthorization()", kus lisame igale autentimisskeemile kohandatud reeglid. Näiteks 'JwtAuthPolicy' lisab selgesõnaliselt 'JwtBearerDefaults.AuthenticationScheme' ja sarnaselt 'WinAuthPolicy' lisab 'NegotiateDefaults.AuthenticationScheme'. See on marsruudi kaitsemehhanismi alusel autentimise õige marsruutimise võtmeks. 💡

Pärast seadistamist kasutame marsruutide kaunistamiseks atribuute [Authorize(Policy = "JwtAuthPolicy")] ja [Authorize(Policy = "WinAuthPolicy")]. See tagab, et iga marsruut järgib oma määratud autentimismehhanismi. Siiski seisame endiselt silmitsi probleemiga, kus mõlemat autentimisskeemi võidakse rakendada ülemaailmselt. Selle probleemi lahendamiseks peame muutma vahevara voogu ja valikuliselt käsitlema päiseid WWW-Authenticate, kasutades sündmuse "OnChallenge" meetodit "HandleResponse()". See tagab, et kui marsruut on JWT-ga kaitstud, kasutatakse päist WWW-Authenticate: Bearer ja Windows Authentication marsruutide puhul saadetakse ainult päis Negotiate.

Üldine voog on tõhus ja turvaline, kuna kasutame parimaid tavasid, nagu loa valideerimine ja vigade käsitlemine. Seadistades poliitikad, autentimisskeemid ja kohandades väljakutse vastuseid, tagame, et autentimispäised on asjakohaste marsruutidega rangelt seotud. Nende sätete abil saavad arendajad enesekindlalt hallata erinevaid autentimisskeeme ühes ASP.NET Core'i rakenduses, põhjustamata tarbetuid konflikte. See lähenemisviis täiustab kasutajakogemust, pakkudes iga kaitstud marsruudi jaoks ainult asjakohase WWW-Authenticate päise. 🛠️

1. lähenemisviis: autentimise muutmine kohandatud vahevaraga

See lahendus kasutab kohandatud vahevara, et piirata JWT kandja autentimist ja Windowsi autentimist (läbirääkimisi) konkreetsete marsruutidega ASP.NET Core taustaprogrammis. Vahevara tagab, et marsruudi autentimisnõuetest lähtuvalt kaasatakse ainult sobiv päis WWW-Authenticate.

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

2. lähenemisviis: poliitikapõhine autoriseerimine koos täpse kontrolliga

See lahendus kasutab ASP.NET Core erinevate marsruutide autentimisskeemide eraldi konfigureerimiseks volitamispoliitikat. Reeglid võimaldavad teil marsruudi põhjal valikuliselt rakendada JWT kandja autentimist või Windowsi autentimist.

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" });
    });
}

3. lähenemisviis: tingimuslik WWW-autentige päis marsruudi põhjal

Selle lähenemisviisi puhul on ASP.NET Core konfigureeritud nii, et see hõlmaks marsruudi põhjal ainult sobivat WWW-autentimise päist, peatades vastuse ja kohandades päist tingimuslikult. See meetod kasutab päiste juhtimise paindlikumaks muutmiseks vahevara.

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

Autentimise optimeerimine JWT ja Windowsi autentimisega ASP.NET Core'is

ASP.NET Core'is nõuab mitme autentimisskeemi haldamine, nagu JWT kandja ja Windowsi autentimine (läbirääkimised), hoolikat konfigureerimist, et tagada õige skeemi rakendamine konkreetsetele marsruutidele. Levinud probleem, millega arendajad silmitsi seisavad, on kõigi konfigureeritud autentimisskeemide globaalne vaikerakendus, mille tulemuseks võib olla soovimatute WWW-autentimise päiste lisamine HTTP-vastustesse. See on eriti problemaatiline, kui soovite, et JWT marsruudid sisaldaksid ainult kandja päist ja Windowsi autentimise marsruudid ainult läbirääkimiste päist. Autentimiskonfiguratsiooni kohandamise ja poliitikate abil saate juhtida, millist autentimisskeemi igale marsruudile rakendatakse, ja vältida vastuste päiste konflikte. 🔐

Üks võimsamaid teie käsutuses olevaid tööriistu on ASP.NET Core'i poliitikapõhine autoriseerimissüsteem. Määrates igale autentimisskeemile konkreetsed poliitikad, saate tagada, et iga marsruut on kaitstud õige mehhanismiga. Näiteks marsruut, mis nõuab JWT kandja autentimist, kasutaks 'JwtAuthPolicy', mis sunnib kasutama ainult kandja skeemi, samas kui marsruut, mis nõuab Windowsi autentimist, oleks kaitstud 'WinAuthPolicy'ga. See lähenemine muudab rakenduse paindlikumaks, kuna võimaldab kohandada turvapoliitikaid sama rakenduse erinevate marsruutide jaoks. Päise WWW-Authenticate peenhäälestamiseks saate kohandada ka JWT konfiguratsioonis sündmust „OnChallenge”, et vaikepäised maha suruda ja tagada, et vastusesse kaasatakse ainult asjakohane päis.

Lisaks nende autentimisskeemide ja poliitikate seadistamisele on oluline mõista, kuidas vahevara selles protsessis toimib. Vahevara "UseAuthentication" ja "UseAuthorization" tuleb hoolikalt sisestada, et tagada õige autentimisskeemi töötlemine enne, kui iga päring oma marsruudile jõuab. Määrates need vahevarad ja struktureerides need õige järjestusega, saate vältida skeemide vahelisi konflikte. See lähenemisviis mitte ainult ei paranda teie rakenduse turvalisust, vaid optimeerib ka kasutajakogemust, tagades, et iga päringu puhul rakendatakse ainult vajalikku autentimisskeemi. 🌐

Levinud küsimused JWT ja Windowsi autentimise kohta ASP.NET Core'is

  1. Mis on ASP.NET Core'i meetodi AddJwtBearer eesmärk?
  2. The AddJwtBearer meetodit kasutatakse JWT kandja autentimise konfigureerimiseks ASP.NET Core'is. See võimaldab teil määrata, kuidas JWT-märke valideeritakse, sealhulgas määrata sellised parameetrid nagu loa väljaandja, sihtrühm ja allkirjastamisvõti. See on oluline API-de kaitsmiseks JWT-märkidega, tagades, et kaitstud ressurssidele pääsevad juurde ainult autentitud kasutajad.
  3. Kuidas ma saan JWT-s WWW-Authenticate vaikepäise maha suruda?
  4. Käsitsedes OnChallenge sündmus JWT kandja konfiguratsioonis, saate vaikepäise WWW-Authenticate maha suruda. Seda saate teha helistades context.HandleResponse(), mis takistab vaikekäitumist, ja seejärel käsitsi kohandatud vastuse seadistamine, näiteks 401 olekukoodi saatmine JSON-i tõrketeatega.
  5. Mida teeb meetod AddNegotiate() ASP.NET Core autentimise kontekstis?
  6. The AddNegotiate() meetod konfigureerib Windowsi autentimise protokolli Negotiate abil. See võimaldab rakendusel autentida kasutajaid Windowsi mandaatide põhjal, tavaliselt ettevõttekeskkondades, kus kasutajad on juba Windowsi domeeni sisse logitud.
  7. Kuidas rakendada erinevatele marsruutidele mitut autentimisskeemi?
  8. Saate kasutada poliitikapõhist autoriseerimist konkreetsete autentimisskeemide rakendamiseks erinevatele marsruutidele. Näiteks saate määratleda a JwtAuthPolicy JWT-ga kaitstud marsruutidele ja a WinAuthPolicy Windowsi autentimisega kaitstud marsruutide jaoks. Seejärel, kasutades [Authorize(Policy = "PolicyName")] atribuudiga, saate siduda iga marsruudi vastava autentimisskeemiga.
  9. Miks on oluline päist „WWW-Authenticate” kohandada?
  10. Kohandamine WWW-Authenticate päis tagab, et kliendile reklaamitakse ainult asjakohast autentimismeetodit. Näiteks ei soovi te, et JWT-marsruudid soovitaksid läbirääkimismeetodit, mis võib kliendi segadusse ajada või põhjustada tarbetuid viipasid autentimiseks. See kohandamine aitab optimeerida turvalisust ja parandada kasutajakogemust, pakkudes selgemat autentimisvoogu.
  11. Kuidas aitab poliitikapõhine autoriseerimine mitme autentimisskeemi haldamisel?
  12. Poliitikapõhine autoriseerimine võimaldab teil määrata erinevate marsruutide jaoks kohandatud autoriseerimispoliitikad, millest igaühel on konkreetne autentimisskeem. See muudab teie koodi paindlikumaks ja hooldatavamaks, eraldades probleemid ja tagades, et iga marsruudi puhul rakendatakse õigeid turvameetmeid. Iga marsruudi jaoks saate määratleda erinevad skeemid ja nõuded, tagades, et asjakohastele ressurssidele rakendatakse õiget mehhanismi.
  13. Kas JWT konfiguratsiooni sündmust "OnChallenge" saab kasutada muude autentimisskeemide jaoks?
  14. Jah, OnChallenge sündmust saab kasutada ka teiste skeemide autentimisprobleemidele reageerimise kohandamiseks. Näiteks saate seda kasutada autentimisskeemi Negotiate käitumise kohandamiseks, surudes maha vaikepäised või muutes kliendile tagastatavaid tõrketeateid. See sündmus pakub võimsat viisi autentimisprobleemide kontrollimiseks.
  15. Milline on vahevara "UseAuthentication" roll ASP.NET Core'is?
  16. The UseAuthentication vahetarkvara kasutatakse autentimise lubamiseks ASP.NET Core'i rakenduses. See tagab, et sissetulevaid päringuid kontrollitakse kehtivate autentimislubade või mandaatide suhtes. See vahevara tuleb lisada enne UseAuthorization vahetarkvara, et kasutaja enne autoriseerimise kontrollimist korralikult autentida.
  17. Kuidas konfigureerida ASP.NET Core'i API-de autentimist ja autoriseerimist?
  18. API-de autentimise ja autoriseerimise konfigureerimiseks peate kasutama AddAuthentication ja AddAuthorization meetodid failis Program.cs. Need meetodid seadistavad autentimisskeemid (nagu JWT ja Negotiate) ja määratlevad poliitikad, mis määravad, milliseid marsruute millise autentimisskeemiga kaitsta. Seejärel kasutage [Authorize] atribuut marsruutide turvamiseks.
  19. Mis kasu on JWT kandja autentimise kasutamisest veebi API-des?
  20. JWT kandja autentimine on olekuta autentimismeetod, mis pakub skaleeritavat ja turvalist viisi kasutajate autentimiseks ilma serveris seansi olekut säilitamata. See on eriti kasulik API-de jaoks, kuna see võimaldab kasutajatel autentida tokeniga, mida saab hõlpsasti HTTP-päringutes edasi anda, muutes selle ideaalseks tänapäevaste veebirakenduste ja mobiiliklientide jaoks.

Mõlemaga ASP.NET Core'i rakenduse loomisel JWT kandja autentimine ja Windowsi autentimine, võib nende autentimisskeemide haldamine olla keeruline. Eesmärk on piirata WWW-Autentimine päis, et näidata ainult marsruudil põhinevat asjakohast skeemi. Määrates kindlaks kohandatud autoriseerimispoliitikad ja käsitledes OnChallenge Sellise sündmuse korral saavad arendajad vastuste päiseid tõhusalt juhtida ja tagada, et iga autentimisskeemi rakendatakse ainult siis, kui see on asjakohane. See lähenemisviis suurendab turvalisust ja kasutajakogemust, eriti stsenaariumide puhul, kus on vaja mitut autentimismehhanismi.

Konkreetsete marsruutide jaoks õigete autentimispäiste tagamine

Kaasaegses ASP.NET Core'i rakenduses võib autentimisskeemide (nt JWT ja Windows Authentication) juhtimine erinevate marsruutide jaoks viia puhtamate ja turvalisemate rakendusteni. Peamine väljakutse on siin tagada, et WWW-Autentimine päised reklaamivad iga marsruudi jaoks ainult sobivat autentimismeetodit. Konfigureerides autentimisskeemid õigesti ja kohandades iga marsruudi vastuse päiseid, saate konflikte kõrvaldada ja oma rakenduse turvalisust parandada. 🌐

Teie puhul hõlmab lahendus kohandatud autoriseerimispoliitikate kasutamist nii JWT kui ka Windowsi autentimise jaoks. Nende poliitikate abil saate juhtida, millist autentimisskeemi marsruudipõhiselt kasutada. Vaikimisi alla surudes WWW-Autentimine päis läbi OnChallenge sündmus oma JWT konfiguratsioonis, saate kohandada vastust nii, et JWT marsruutide puhul kuvatakse ainult kandja päis ja Windowsi autentimise marsruutide jaoks päis Läbirääkimised. Selline lähenemine tagab, et vastuses saadetakse ainult asjakohane päis, mis muudab autentimisprotsessi sujuvamaks ja parandab kasutajakogemust. 🔒

Neid tehnikaid kasutades saate saavutada oma kasutajate jaoks puhtama autentimisvoo ja vältida tarbetuid autentimise viipasid. Lisaks annab see parema kontrolli teie rakenduse turvaasendi üle. See on suurepärane näide sellest, kuidas ASP.NET Core'i autentimise peenhäälestus võimaldab luua rohkem kohandatud, tugevamaid ja turvalisemaid veebirakendusi. 💻

Allikad ja viited
  1. ASP.NET Core'i autentimise konfigureerimise põhjalikumaks sukeldumiseks vaadake Microsofti ametlikku dokumentatsiooni ASP.NET põhiautentimine .
  2. Juhiste saamiseks JWT kandja autentimise ja mitme skeemi käsitlemise kohta vaadake seda kõikehõlmavat juhendit JWT kandja autentimine ASP.NET Core'is .
  3. Windowsi autentimise ja läbirääkimisskeemi kohta lisateabe saamiseks vaadake dokumentatsiooni aadressil Windowsi autentimine ASP.NET Core'is .