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


Windows-hitelesítés konfigurálása a ASP.NET Core-ban

Rick Anderson és Kirk Larkin

A Windows-hitelesítés (más néven Egyeztetés, Kerberos vagy NTLM-hitelesítés) konfigurálható az IIS-velKestrel vagy HTTP.sysüzemeltetett ASP.NET Core-alkalmazásokhoz.

A Windows-hitelesítés az operációs rendszerre támaszkodik ASP.NET Core-alkalmazások felhasználóinak hitelesítéséhez. A Windows-hitelesítést olyan kiszolgálókhoz használják, amelyek vállalati hálózaton futnak Active Directory tartományi identitásokkal vagy Windows-fiókokkal a felhasználók azonosításához. A Windows-hitelesítés olyan intranetes környezetekhez ideális, ahol a felhasználók, az ügyfélalkalmazások és a webkiszolgálók ugyanahhoz a Windows-tartományhoz tartoznak.

Mikor érdemes Windows-hitelesítést használni?

A Windows-hitelesítés olyan webalkalmazásokhoz használható, amelyek a szervezet belső magánhálózatán belül működnek, és csak az alkalmazottak (és más jogosult felhasználók) számára érhetők el ugyanazon a hálózaton belül. A felhasználókezelés az Active Directoryban (AD) történik, és a felhasználók a meglévő Windows-tartományfiókjukkal hitelesítik magukat.

A Windows-hitelesítés számos előnnyel jár az intranetes alkalmazások számára:

  • Zökkenőmentes felhasználói élmény – A rendszer automatikusan hitelesíti a felhasználókat az aktív Windows-munkamenet alapján, vagy egy szabványos böngésző párbeszédpanelen kérik a Windows-hitelesítő adataik megadását.
  • Integráció az Active Directoryval – Meglévő Windows-infrastruktúrát és biztonsági szabályzatokat használ, beleértve a felhasználói csoportokat, a fiókzárolásokat és a többtényezős hitelesítést (MFA).
  • Biztonságos hitelesítő adatok kezelése – A hitelesítés olyan biztonságos protokollokkal történik, mint a Kerberos, és nincs szükség külön felhasználói hitelesítő adatok kezelésére.
  • Szerepköralapú engedélyezés – Az alkalmazások hozzáférhetnek a felhasználói és csoportadatokhoz az Active Directoryból, lehetővé téve a szerepköralapú hozzáférés-vezérlést (RBAC) az alkalmazásban.
  • Csökkentett adminisztrációs többletterhelés – Nincs szükség külön felhasználói adatbázis vagy hitelesítőadat-kezelési rendszer fenntartására.

Ez ideálissá teszi a Windows-hitelesítést azoknak a szervezeteknek, amelyek használni szeretnék meglévő Windows-infrastruktúrájukat, például az intranetes portálokat.

Note

A Http/2 nem támogatja a Windows-hitelesítést. Bár a hitelesítési kihívások HTTP/2-válaszokon keresztül küldhetők el, az ügyfélnek HTTP/1.1-re kell visszaminősítenie a hitelesítési folyamatot. Ez egy protokollkorlátozás, nem pedig a Windows-hitelesítés elavulása. A hitelesítés után a normál HTTP/2 kommunikáció folytatódhat a későbbi kérések esetében.

A nyilvános alkalmazások esetében biztonsági és használhatósági megfontolások miatt a Windows-hitelesítés nem ajánlott. Ezek az okok a következők:

  • A Windows-hitelesítés az Active Directory védelme érdekében a legjobb belső védelemmel rendelkezik, mivel a belső hálózaton kívül történő felfedése biztonsági kockázatokat jelent.
  • A külső felhasználók nem rendelkeznek Windows-tartományi fiókkal.
  • Bonyolult a szükséges hálózati infrastruktúra biztonságos konfigurálása, és a tűzfalak vagy proxyk zavarhatják a hitelesítési folyamatot.
  • Nem platformfüggetlen, és nem nyújt testreszabási lehetőségeket a tervezéshez és a felhasználói élményhez.

A különböző forgatókönyvek alternatívái

Az alkalmazás követelményeinek megfelelően fontolja meg az alábbi alternatívákat:

Nyilvános alkalmazások esetén:

Intranetes és külső felhasználókkal rendelkező vegyes környezetek esetén:

  • Active Directory összevonási szolgáltatások (ADFS) OpenID Connecttel
  • Azure Active Directory hibrid konfigurációval

Modern hitelesítést használó vállalati környezetek esetén:

  • Azure Active Directory egyszeri bejelentkezéssel
  • SAML-alapú megoldások külső identitásszolgáltatókkal

Proxy- és terheléselosztó forgatókönyvek

A Windows-hitelesítés olyan állapotalapú forgatókönyv, amelyet elsősorban intraneten használnak, ahol a proxy vagy a terheléselosztó általában nem kezeli az ügyfelek és a kiszolgálók közötti forgalmat. Proxy vagy terheléselosztó használata esetén a Windows-hitelesítés csak akkor működik, ha a proxy vagy a terheléselosztó:

  • Kezeli a hitelesítést.
  • Átadja a felhasználói hitelesítési adatokat az alkalmazásnak (például egy kérelemfejlécben), amely a hitelesítési adatokra hat.

A Windows-hitelesítés alternatíva olyan környezetekben, ahol proxykat és terheléselosztókat használnak, az Active Directory Összevont szolgáltatások (ADFS) és az OpenID Connect (OIDC) használata.

IIS/IIS Express

Adja hozzá a Microsoft.AspNetCore.Authentication.Negotiate NuGet csomagot és a hitelesítési szolgáltatásokat a következő hívással AddAuthenticationProgram.cs:

using Microsoft.AspNetCore.Authentication.Negotiate;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
   .AddNegotiate();

builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = options.DefaultPolicy;
});
builder.Services.AddRazorPages();

var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapRazorPages();

app.Run();

Az előző kódot az ASP.NET Core Razor Pages-sablon hozta létre , amelyen a Windows-hitelesítés meg van adva.

Indítási beállítások (hibakereső)

Az indítási beállítások konfigurálása csak az Properties/launchSettings.json IIS Express fájljára van hatással, és nem konfigurálja az IIS-t a Windows-hitelesítéshez. A kiszolgálókonfigurációt az IIS szakasz ismerteti.

A Visual Studióban vagy a .NET CLI-ben elérhető webalkalmazás-sablonok konfigurálhatók a Windows-hitelesítés támogatásához, amely automatikusan frissíti a Properties/launchSettings.json fájlt.

Új projekt

Hozzon létre egy új Razor oldalakat vagy MVC-alkalmazást. A További információ párbeszédpanelen állítsa a hitelesítés típusátWindowsra.

Nyisd meg az alkalmazást. A felhasználónév megjelenik a renderelt alkalmazás felhasználói felületén.

Meglévő projekt

A projekt tulajdonságai engedélyezik a Windows-hitelesítést, és letiltják a névtelen hitelesítést. Nyissa meg az indítási profilok párbeszédpanelt:

  1. A Megoldáskezelőben kattintson a jobb gombbal a projektre, és válassza a Tulajdonságok lehetőséget.
  2. Válassza az Általános hibakeresés > lapot, és válassza a Hibakeresési indítási profilok felhasználói felületének megnyitása lehetőséget.
  3. Törölje a jelet a Névtelen hitelesítés engedélyezése jelölőnégyzetből.
  4. Jelölje be a Windows-hitelesítés engedélyezésének jelölőnégyzetét.

Másik lehetőségként a tulajdonságok konfigurálhatók a iisSettingslaunchSettings.json fájl csomópontjában:

"iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": false,
    "iisExpress": {
        "applicationUrl": "http://localhost:52171/",
        "sslPort": 44308
    }
}

IIS

Az IIS a ASP.NET Core-modullal üzemelteti ASP.NET Core-alkalmazásokat. A Windows-hitelesítés az IIS-hez van konfigurálva a web.config fájlon keresztül. A következő szakaszok a következőket mutatják be:

  • Adjon meg egy helyi web.config fájlt, amely aktiválja a Windows-hitelesítést a kiszolgálón az alkalmazás üzembe helyezésekor.
  • Az IIS-kezelővel konfigurálhatja a kiszolgálón már üzembe helyezett ASP.NET Core-alkalmazás web.config fájlját.

Ha még nem tette meg, engedélyezze az IIS számára ASP.NET Core-alkalmazások üzemeltetését. További információ: Host ASP.NET Core on Windows with IIS.

Engedélyezze az IIS szerepkör-szolgáltatást a Windows-hitelesítéshez. További információ: Windows-hitelesítés engedélyezése az IIS szerepkör-szolgáltatásokban (lásd: 2. lépés).

Az IIS Integration Middleware alapértelmezés szerint úgy van konfigurálva, hogy automatikusan hitelesítse a kéréseket. Továbbiakért lásd: ASP.NET Core alkalmazás üzemeltetése Windowsos IIS használatával: IIS-beállítások (AutomaticAuthentication).

A ASP.NET core modul úgy van konfigurálva, hogy alapértelmezés szerint továbbítsa a Windows-hitelesítési jogkivonatot az alkalmazásnak. További információ: ASP.NET Alapvető modul konfigurációs referencia: Az aspNetCore elem attribútumai.

Használja az alábbi módszerek egyikét :

  • A projekt közzététele és üzembe helyezése előtt adja hozzá a következő web.config fájlt a projekt gyökeréhez:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <security>
            <authentication>
              <anonymousAuthentication enabled="false" />
              <windowsAuthentication enabled="true" />
            </authentication>
          </security>
        </system.webServer>
      </location>
    </configuration>
    

    Amikor a .NET SDK közzéteszi a projektet (a <IsTransformWebConfigDisabled> projektfájlban beállított true tulajdonság nélkül), a közzétett web.config fájl tartalmazza a szakaszt <location><system.webServer><security><authentication> . További információért a <IsTransformWebConfigDisabled> tulajdonságról lásd a web.config fájlt.

  • A projekt közzététele és üzembe helyezése után hajtsa végre a kiszolgálóoldali konfigurációt az IIS Managerrel:

    1. Az IIS-kezelőben válassza ki az IIS-webhelyet a Kapcsolatok oldalsáv Helyek csomópontja alatt.
    2. Kattintson duplán a Hitelesítés elemre az IIS-területen .
    3. Válassza a Névtelen hitelesítés lehetőséget. Válassza a Letiltás lehetőséget a Műveletek oldalsávon.
    4. Válassza a Windows-hitelesítés lehetőséget. Válassza az Engedélyezés lehetőséget a Műveletek oldalsávon.

    A műveletek végrehajtásakor az IIS Manager módosítja az alkalmazás web.config fájlját. A <system.webServer><security><authentication> csomópont frissített beállításokkal van hozzáadva anonymousAuthentication és windowsAuthentication számára:

    <system.webServer>
      <security>
        <authentication>
          <anonymousAuthentication enabled="false" />
          <windowsAuthentication enabled="true" />
        </authentication>
      </security>
    </system.webServer>
    

    Az IIS Manager által a <system.webServer> fájlhoz hozzáadott szakasz nincs összhangban a .NET SDK által az alkalmazás közzétételekor hozzáadott <location> szakaszával. Mivel a szakasz a <location> csomóponton kívül van hozzáadva, ezért az aktuális alkalmazás bármely alalkalmazása örökli a beállításokat. Az öröklés megakadályozása érdekében helyezze át a hozzáadott <security> szakaszt a <location><system.webServer> .NET SDK által megadott szakaszba.

    Ha az IIS Managert használja az IIS-konfiguráció hozzáadásához, az csak az alkalmazás web.config fájlját érinti a kiszolgálón. Az alkalmazás későbbi üzembe helyezése felülírhatja a kiszolgáló beállításait, ha a kiszolgáló web.config másolatát lecseréli a projekt web.config fájlja. A beállítások kezeléséhez használja az alábbi módszerek egyikét :

    • Az IIS Managerrel alaphelyzetbe állíthatja a beállításokat aweb.config fájlban, miután a fájl felülíródott az üzembe helyezéskor.
    • Adjon hozzá egyweb.config fájlt az alkalmazáshoz helyileg a beállításokkal.

Kestrel

A Microsoft.AspNetCore.Authentication.Negotiate NuGet-csomag a Kestrel Windows-hitelesítés engedélyezéséhez használható a Negotiate és a Kerberos használatával Windows, Linux és macOS rendszeren.

Warning

A hitelesítő adatok a kapcsolaton belüli kérések között is megőrizhetők. A "Negotiate" hitelesítés nem használható proxykkal, kivéve ha a proxy 1:1 kapcsolati affinitást (állandó kapcsolatot) tart fenn Kestrel-vel.

Note

Az Egyeztetés kezelője észleli, hogy a mögöttes kiszolgáló natív módon támogatja-e a Windows-hitelesítést, és hogy engedélyezve van-e. Ha a kiszolgáló támogatja a Windows-hitelesítést, de le van tiltva, hibaüzenet jelenik meg, amely arra kéri, hogy engedélyezze a kiszolgáló implementálását. Ha a Windows-hitelesítés engedélyezve van a kiszolgálón, az Egyeztetés kezelő transzparens módon továbbítja a hitelesítési kéréseket.

A hitelesítést és a tartalék engedélyezési szabályzatot a következő kiemelt kód Program.csengedélyezi:

using Microsoft.AspNetCore.Authentication.Negotiate;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
   .AddNegotiate();

builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = options.DefaultPolicy;
});
builder.Services.AddRazorPages();

var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapRazorPages();

app.Run();

Az előző kódot az ASP.NET Core Razor Pages-sablon hozta létre , amelyen a Windows-hitelesítés meg van adva.

Kiemelt sorok:

Note

A AddAuthentication és a AddNegotiate meghívása regisztrálja és konfigurálja a Negotiate kezelőt; nem futtat hitelesítést minden kérésnél. A hitelesítési köztes szoftver (UseAuthentication) meghívja a kezelőt és feltölti a HttpContext.User, és meg kell jelennie a UseAuthorization előtt, hogy a szabályzat kiértékelése működjön.

Kerberos-hitelesítés és szerepköralapú hozzáférés-vezérlés (RBAC)

A Kerberos-hitelesítés Linuxon vagy macOS rendszeren nem biztosít szerepkör-információkat a hitelesített felhasználók számára. Ha szerepkör- és csoportadatokat szeretne hozzáadni egy Kerberos-felhasználóhoz, a hitelesítési kezelőt úgy kell konfigurálni, hogy lekérje a szerepköröket egy LDAP-tartományból. A legalapvetőbb konfiguráció csak egy LDAP-tartományt határoz meg a lekérdezéshez, és a hitelesített felhasználó környezetét használja az LDAP-tartomány lekérdezéséhez:

using Microsoft.AspNetCore.Authentication.Negotiate;
using System.Runtime.InteropServices;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
    .AddNegotiate(options =>
    {
        if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
        {
            options.EnableLdap("contoso.com");
        }
    });

Egyes konfigurációkhoz adott hitelesítő adatokra lehet szükség az LDAP-tartomány lekérdezéséhez. A hitelesítő adatok a következő kiemelt beállításokban adhatók meg:

using Microsoft.AspNetCore.Authentication.Negotiate;
using System.Runtime.InteropServices;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
        .AddNegotiate(options =>
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
            {
                options.EnableLdap(settings =>
                {
                    settings.Domain = "contoso.com";
                    settings.MachineAccountName = "machineName";
                    settings.MachineAccountPassword =
                                      builder.Configuration["Password"];
                });
            }
        });

builder.Services.AddRazorPages();

Alapértelmezés szerint az egyeztetési hitelesítési kezelő feloldja a beágyazott tartományokat. Nagy vagy bonyolult LDAP-környezetben a beágyazott tartományok feloldása lassú keresést vagy sok memóriát eredményezhet az egyes felhasználók számára. A beágyazott tartományfeloldás letiltható a IgnoreNestedGroups beállítással.

Névtelen kérések engedélyezettek. Az ASP.NET core authorization használatával kérje le a névtelen hitelesítési kérelmeket.

Windows-környezet konfigurálása

Az Microsoft.AspNetCore.Authentication.Negotiate APIfelhasználói módú hitelesítést hajt végre. A szolgáltatásnévneveket (SPN-eket) a szolgáltatást futtató felhasználói fiókhoz kell hozzáadni, nem a számítógépfiókhoz. Futtassa a setspn -S HTTP/myservername.mydomain.com myuser-t egy rendszergazdai parancshéjban.

Kerberos és NTLM

ASP.NET Core-on a Kestrel csomag megkísérli a Kerberos használatát, amely biztonságosabb és performánsabb hitelesítési módszer, mint az NTLM.

using Microsoft.AspNetCore.Authentication.Negotiate;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
   .AddNegotiate();

builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = options.DefaultPolicy;
});
builder.Services.AddRazorPages();

var app = builder.Build();

NegotiateDefaults.AuthenticationScheme a Kerberost adja meg, mert ez az alapértelmezett érték.

Az IIS, az IISExpress és a Kestrel egyaránt támogatják a Kerberos és az NTLM protokollokat.

A WWW-Authenticate: fejléc vizsgálata az IIS vagy az IISExpress használatával egy olyan eszközzel, mint a Fiddler, megmutatja, hogy vagy Negotiate vagy NTLM van jelen.

Kestrel csak a WWW-Authenticate: Negotiate mutatja

A WWW-Authenticate: Negotiate fejléc azt jelenti, hogy a kiszolgáló használhatja az NTLM-et vagy a Kerberost. Kestrel megköveteli a Negotiate fejléc előtagot, és nem támogatja a NTLM közvetlen megadását a kérelem- vagy válasz-hitelesítési fejlécekben. Az NTLM támogatott Kestrel, de Negotiate formájában kell elküldeni.

A Kestrel dátumon, annak megállapításához, hogy az NTLM vagy a Kerberos van-e használatban, dekódolja a Base64 kódolással a fejlécet, amely vagy NTLM vagy HTTP értékeket mutat. HTTP Azt jelzi, hogy a Kerberost használták.

Linux- és macOS-környezetkonfiguráció

A Linux vagy macOS rendszerű gépek Windows-tartományhoz való csatlakoztatására vonatkozó utasításokat az Azure Data Studio csatlakoztatása az SQL Serverhez Windows-hitelesítéssel – Kerberos-cikk tartalmazza. Az utasítások létrehoznak egy számítógépfiókot a tartomány Linux-gépéhez. Az SPN-eket hozzá kell adni a számítógépfiókhoz.

Note

Ha követi az Azure Data Studio csatlakoztatása az SQL Serverhez Windows-hitelesítéssel – Kerberos cikk útmutatását, cserélje le a python-software-properties elemet a python3-software-properties elemre, ha szükséges.

Miután a Linux- vagy macOS-gépet csatlakoztatta a tartományhoz, további lépések szükségesek az SPN-eket tartalmazó keytab-fájl biztosításához.

  • A tartományvezérlőn adjon hozzá új webszolgáltatás szolgáltatási főneveket (SPN-eket) a számítógépfiókhoz.
    • setspn -S HTTP/mywebservice.mydomain.com mymachine
    • setspn -S HTTP/mywebservice@MYDOMAIN.COM mymachine
  • Keytab-fájl létrehozása a ktpass használatával:
    • ktpass -princ HTTP/mywebservice.mydomain.com@MYDOMAIN.COM -pass myKeyTabFilePassword -mapuser MYDOMAIN\mymachine$ -pType KRB5_NT_PRINCIPAL -out c:\temp\mymachine.HTTP.keytab -crypto AES256-SHA1
    • Egyes mezőket nagybetűvel kell megadni a megadott módon.
  • Másolja a keytab fájlt a Linux vagy macOS gépre.
  • Válassza ki a keytab-fájlt egy környezeti változón keresztül: export KRB5_KTNAME=/tmp/mymachine.HTTP.keytab
  • Hívja meg a klist-t, hogy megjelenítse a jelenleg használatra elérhető egyszerű szolgáltatásneveket.

Note

A keytab-fájlok tartományi hozzáférési hitelesítő adatokat tartalmaznak, és ennek megfelelően kell védeni.

HTTP.sys

HTTP.sys támogatja a Kernel módú Windows-hitelesítést egyeztetés, NTLM vagy alapszintű hitelesítés használatával.

A következő kód hozzáadja a hitelesítést, és konfigurálja az alkalmazás webes gazdagépét a Windows-hitelesítés HTTP.sys használatára:

using Microsoft.AspNetCore.Server.HttpSys;
using System.Runtime.InteropServices;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddAuthentication(HttpSysDefaults.AuthenticationScheme);

if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
    builder.WebHost.UseHttpSys(options =>
        {
            options.Authentication.Schemes =
                AuthenticationSchemes.NTLM |
                AuthenticationSchemes.Negotiate;
            options.Authentication.AllowAnonymous = false;
        });
}

Note

HTTP.sys a Kernel Mode hitelesítéshez delegál a Kerberos hitelesítési protokollal. A Kerberos és a HTTP.sysnem támogatja a felhasználói módú hitelesítést. A számítógépfiókot kell használni az Active Directoryból beszerzett Kerberos-jogkivonat/jegy visszafejtéséhez, amelyet az ügyfél továbbít a kiszolgálónak a felhasználó hitelesítéséhez. Regisztrálja a gazdagép szolgáltatási főnevét (SPN), nem pedig az alkalmazás felhasználóját.

Note

HTTP.sys nem támogatott a Nano Server 1709-es verziótól kezdődően vagy annál újabb verziókban. Ha Windows-hitelesítést és HTTP.sys szeretne használni a Nano Serverrel, használjon egy Server Core-tárolót (microsoft/windowsservercore) (lásd https://hub.docker.com/_/microsoft-windows-servercore). További információ a Server Core-ról: Mi a Server Core telepítési lehetőség a Windows Serverben?

Felhasználók engedélyezése

A névtelen hozzáférés konfigurációs állapota határozza meg az alkalmazás és az [Authorize][AllowAnonymous] attribútumok használatát. Az alábbi két szakasz ismerteti, hogyan kezelhetők a névtelen hozzáférés nem engedélyezett és engedélyezett konfigurációs állapotai.

Névtelen hozzáférés letiltása

Ha a Windows-hitelesítés engedélyezve van, és a névtelen hozzáférés le van tiltva, az [Authorize] és [AllowAnonymous] attribútumok nem lesznek hatással. Ha egy IIS-webhely úgy van konfigurálva, hogy letiltsa a névtelen hozzáférést, a kérés soha nem éri el az alkalmazást. Ezért az [AllowAnonymous] attribútum nem alkalmazható.

Névtelen hozzáférés engedélyezése

Ha a Windows-hitelesítés és a névtelen hozzáférés is engedélyezve van, használja a [Authorize] és [AllowAnonymous] attribútumokat. Az [Authorize] attribútum lehetővé teszi az alkalmazás hitelesítést igénylő végpontjainak védelmét. Az [AllowAnonymous] attribútum felülírja az attribútumot a [Authorize] névtelen hozzáférést lehetővé tevő alkalmazásokban. Az attribútumhasználat részleteiért lásd: Egyszerű engedélyezés a ASP.NET Core-ban.

Note

Alapértelmezés szerint azok a felhasználók, akik nem rendelkeznek engedéllyel egy lap elérésére, üres HTTP 403-válasz jelenik meg. A StatusCodePages Middleware konfigurálható úgy, hogy jobb "Hozzáférés megtagadva" élményt biztosítson a felhasználóknak.

Impersonation

ASP.NET Core nem valósít megszemélyesítést. Az alkalmazások az alkalmazás identitásával futnak minden kérésnél, az alkalmazáskészlet vagy a folyamat identitásának használatával. Ha az alkalmazásnak egy felhasználó nevében kell végrehajtania egy műveletet, használja a WindowsIdentity.RunImpersonated vagy RunImpersonatedAsync elemet egy terminál inline köztes rétegben a következő módon: Program.cs. Futtasson egyetlen műveletet ebben a környezetben, majd zárja be a környezetet.

app.Run(async (context) =>
{
    try
    {
        var user = (WindowsIdentity)context.User.Identity!;

        await context.Response
            .WriteAsync($"User: {user.Name}\tState: {user.ImpersonationLevel}\n");

        await WindowsIdentity.RunImpersonatedAsync(user.AccessToken, async () =>
        {
            var impersonatedUser = WindowsIdentity.GetCurrent();
            var message =
                $"User: {impersonatedUser.Name}\t" +
                $"State: {impersonatedUser.ImpersonationLevel}";

            var bytes = Encoding.UTF8.GetBytes(message);
            await context.Response.Body.WriteAsync(bytes, 0, bytes.Length);
        });
    }
    catch (Exception e)
    {
        await context.Response.WriteAsync(e.ToString());
    }
});

Bár a csomag engedélyezi a Microsoft.AspNetCore.Authentication.Negotiate hitelesítést Windows, Linux és macOS rendszeren, a megszemélyesítés csak Windows rendszeren támogatott.

Jogcímátalakítások

Az IIS-sel AuthenticateAsync való üzemeltetéskor nem kerül belsőleg meghívásra a felhasználó inicializálásához. Ezért egy IClaimsTransformation implementáció, amelyet a jogcímek minden hitelesítés utáni átalakítására használnak, alapértelmezés szerint nincs aktiválva. További információ és a jogcímátalakításokat aktiváló kód példája: Különbségek a folyamatban lévő és a folyamaton kívüli üzemeltetés között.

További erőforrások

A Windows-hitelesítés (más néven Egyeztetés, Kerberos vagy NTLM-hitelesítés) konfigurálható az IIS-velKestrel vagy HTTP.sysüzemeltetett ASP.NET Core-alkalmazásokhoz.

A Windows-hitelesítés az operációs rendszerre támaszkodik ASP.NET Core-alkalmazások felhasználóinak hitelesítéséhez. Windows-hitelesítést akkor használhat, ha a kiszolgáló egy vállalati hálózaton fut Active Directory-tartományadentitások vagy Windows-fiókok használatával a felhasználók azonosításához. A Windows-hitelesítés olyan intranetes környezetekhez ideális, ahol a felhasználók, az ügyfélalkalmazások és a webkiszolgálók ugyanahhoz a Windows-tartományhoz tartoznak.

Mikor érdemes Windows-hitelesítést használni?

A Windows-hitelesítés olyan webalkalmazásokhoz használható, amelyek a szervezet belső magánhálózatán belül működnek, és csak az alkalmazottak (és más jogosult felhasználók) számára érhetők el ugyanazon a hálózaton belül. A felhasználókezelés az Active Directoryban (AD) történik, és a felhasználók a meglévő Windows-tartományfiókjukkal hitelesítik magukat.

A Windows-hitelesítés számos előnnyel jár az intranetes alkalmazások számára:

  • Zökkenőmentes felhasználói élmény – A rendszer automatikusan hitelesíti a felhasználókat az aktív Windows-munkamenet alapján, vagy egy szabványos böngésző párbeszédpanelen kérik a Windows-hitelesítő adataik megadását.
  • Integráció az Active Directoryval – Meglévő Windows-infrastruktúrát és biztonsági szabályzatokat használ, beleértve a felhasználói csoportokat, a fiókzárolásokat és a többtényezős hitelesítést (MFA).
  • Biztonságos hitelesítő adatok kezelése – A hitelesítés olyan biztonságos protokollokkal történik, mint a Kerberos, és nincs szükség külön felhasználói hitelesítő adatok kezelésére.
  • Szerepköralapú engedélyezés – Az alkalmazások hozzáférhetnek a felhasználói és csoportadatokhoz az Active Directoryból, lehetővé téve a szerepköralapú hozzáférés-vezérlést (RBAC) az alkalmazásban.
  • Csökkentett adminisztrációs többletterhelés – Nincs szükség külön felhasználói adatbázis vagy hitelesítőadat-kezelési rendszer fenntartására.

Ez ideálissá teszi a Windows-hitelesítést azoknak a szervezeteknek, amelyek használni szeretnék meglévő Windows-infrastruktúrájukat, például az intranetes portálokat.

Note

A Http/2 nem támogatja a Windows-hitelesítést. Bár a hitelesítési kihívások HTTP/2-válaszokon keresztül küldhetők el, az ügyfélnek HTTP/1.1-re kell visszaminősítenie a hitelesítési folyamatot. Ez egy protokollkorlátozás, nem pedig a Windows-hitelesítés elavulása. A hitelesítés után a normál HTTP/2 kommunikáció folytatódhat a későbbi kérések esetében.

A nyilvános alkalmazások esetében biztonsági és használhatósági megfontolások miatt a Windows-hitelesítés nem ajánlott. Ezek az okok a következők:

  • A Windows-hitelesítés az Active Directory védelme érdekében a legjobb belső védelemmel rendelkezik, mivel a belső hálózaton kívül történő felfedése biztonsági kockázatokat jelent.
  • A külső felhasználók nem rendelkeznek Windows-tartományi fiókkal.
  • Bonyolult a szükséges hálózati infrastruktúra biztonságos konfigurálása, és a tűzfalak vagy proxyk zavarhatják a hitelesítési folyamatot.
  • Nem platformfüggetlen, és nem nyújt testreszabási lehetőségeket a tervezéshez és a felhasználói élményhez.

A különböző forgatókönyvek alternatívái

Az alkalmazás követelményeinek megfelelően fontolja meg az alábbi alternatívákat:

Nyilvános alkalmazások esetén:

Intranetes és külső felhasználókkal rendelkező vegyes környezetek esetén:

  • Active Directory összevonási szolgáltatások (ADFS) OpenID Connecttel
  • Azure Active Directory hibrid konfigurációval

Modern hitelesítést használó vállalati környezetek esetén:

  • Azure Active Directory egyszeri bejelentkezéssel
  • SAML-alapú megoldások külső identitásszolgáltatókkal

Proxy- és terheléselosztó forgatókönyvek

A Windows-hitelesítés olyan állapotalapú forgatókönyv, amelyet elsősorban intraneten használnak, ahol a proxy vagy a terheléselosztó általában nem kezeli az ügyfelek és a kiszolgálók közötti forgalmat. Proxy vagy terheléselosztó használata esetén a Windows-hitelesítés csak akkor működik, ha a proxy vagy a terheléselosztó:

  • Kezeli a hitelesítést.
  • Átadja a felhasználói hitelesítési adatokat az alkalmazásnak (például egy kérelemfejlécben), amely a hitelesítési adatokra hat.

A Windows-hitelesítés alternatíva olyan környezetekben, ahol proxykat és terheléselosztókat használnak, az Active Directory Összevont szolgáltatások (ADFS) és az OpenID Connect (OIDC) használata.

IIS/IIS Express

Hitelesítési szolgáltatások hozzáadása a AddAuthentication (Microsoft.AspNetCore.Server.IISIntegration névtér) meghívásávalStartup.ConfigureServices:

services.AddAuthentication(IISDefaults.AuthenticationScheme);

Indítási beállítások (hibakereső)

Az indítási beállítások konfigurálása csak az Properties/launchSettings.json IIS Express fájljára van hatással, és nem konfigurálja az IIS-t a Windows-hitelesítéshez. A kiszolgálókonfigurációt az IIS szakasz ismerteti.

A Visual Studióban vagy a .NET CLI-ben elérhető webalkalmazás-sablon konfigurálható a Windows-hitelesítés támogatására, amely automatikusan frissíti a Properties/launchSettings.json fájlt.

Új projekt

  1. Új projekt létrehozása.
  2. Válassza ASP.NET Core Web Application lehetőséget. Válassza a Következőlehetőséget.
  3. Adjon meg egy nevet a Projektnév mezőben. Győződjön meg arról, hogy a Hely bejegyzés helyes, vagy adjon meg egy helyet a projektnek. Válassza a Create gombot.
  4. Válassza a Módosítás lehetőséget a Hitelesítés területen.
  5. A Hitelesítés módosítása ablakban válassza a Windows-hitelesítés lehetőséget. Kattintson az OK gombra.
  6. Válassza ki a webalkalmazást.
  7. Válassza a Create gombot.

Nyisd meg az alkalmazást. A felhasználónév megjelenik a renderelt alkalmazás felhasználói felületén.

Meglévő projekt

A projekt tulajdonságai engedélyezik a Windows-hitelesítést, és letiltják a névtelen hitelesítést:

  1. Kattintson a jobb gombbal a projektre a Megoldáskezelőben , és válassza a Tulajdonságok lehetőséget.
  2. Válassza a Hibakeresés lapot.
  3. Törölje a jelet a Névtelen hitelesítés engedélyezése jelölőnégyzetből.
  4. Jelölje be a Windows-hitelesítés engedélyezésének jelölőnégyzetét.
  5. Mentse és zárja be a tulajdonságok oldalát.

Másik lehetőségként a tulajdonságok konfigurálhatók a iisSettingslaunchSettings.json fájl csomópontjában:

"iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": false,
    "iisExpress": {
        "applicationUrl": "http://localhost:52171/",
        "sslPort": 44308
    }
}

Meglévő projekt módosításakor ellenőrizze, hogy a projektfájl tartalmaz-e csomaghivatkozást a Microsoft.AspNetCore.App metacsomaghozvagy a Microsoft.AspNetCore.Authentication NuGet-csomaghoz.

IIS

Az IIS a ASP.NET Core-modullal üzemelteti ASP.NET Core-alkalmazásokat. A Windows-hitelesítés az IIS-hez van konfigurálva a web.config fájlon keresztül. A következő szakaszok a következőket mutatják be:

  • Adjon meg egy helyi web.config fájlt, amely aktiválja a Windows-hitelesítést a kiszolgálón az alkalmazás üzembe helyezésekor.
  • Az IIS-kezelővel konfigurálhatja a kiszolgálón már üzembe helyezett ASP.NET Core-alkalmazás web.config fájlját.

Ha még nem tette meg, engedélyezze az IIS számára ASP.NET Core-alkalmazások üzemeltetését. További információ: Host ASP.NET Core on Windows with IIS.

Engedélyezze az IIS szerepkör-szolgáltatást a Windows-hitelesítéshez. További információ: Windows-hitelesítés engedélyezése az IIS szerepkör-szolgáltatásokban (lásd: 2. lépés).

Az IIS Integration Middleware alapértelmezés szerint úgy van konfigurálva, hogy automatikusan hitelesítse a kéréseket. Továbbiakért lásd: ASP.NET Core alkalmazás üzemeltetése Windowsos IIS használatával: IIS-beállítások (AutomaticAuthentication).

A ASP.NET core modul úgy van konfigurálva, hogy alapértelmezés szerint továbbítsa a Windows-hitelesítési jogkivonatot az alkalmazásnak. További információ: ASP.NET Alapvető modul konfigurációs referencia: Az aspNetCore elem attribútumai.

Használja az alábbi módszerek egyikét :

  • A projekt közzététele és üzembe helyezése előtt adja hozzá a következő web.config fájlt a projekt gyökeréhez:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <security>
            <authentication>
              <anonymousAuthentication enabled="false" />
              <windowsAuthentication enabled="true" />
            </authentication>
          </security>
        </system.webServer>
      </location>
    </configuration>
    

    Amikor a .NET SDK közzéteszi a projektet (a <IsTransformWebConfigDisabled> projektfájlban beállított true tulajdonság nélkül), a közzétett web.config fájl tartalmazza a szakaszt <location><system.webServer><security><authentication> . A <IsTransformWebConfigDisabled> tulajdonsággal kapcsolatos további információkért lásd: ASP.NET Core üzemeltetése Windows-on IIS használatával.

  • A projekt közzététele és üzembe helyezése után hajtsa végre a kiszolgálóoldali konfigurációt az IIS Managerrel:

    1. Az IIS-kezelőben válassza ki az IIS-webhelyet a Kapcsolatok oldalsáv Helyek csomópontja alatt.
    2. Kattintson duplán a Hitelesítés elemre az IIS-területen .
    3. Válassza a Névtelen hitelesítés lehetőséget. Válassza a Letiltás lehetőséget a Műveletek oldalsávon.
    4. Válassza a Windows-hitelesítés lehetőséget. Válassza az Engedélyezés lehetőséget a Műveletek oldalsávon.

    A műveletek végrehajtásakor az IIS Manager módosítja az alkalmazás web.config fájlját. A <system.webServer><security><authentication> csomópont frissített beállításokkal van hozzáadva anonymousAuthentication és windowsAuthentication számára:

    <system.webServer>
      <security>
        <authentication>
          <anonymousAuthentication enabled="false" />
          <windowsAuthentication enabled="true" />
        </authentication>
      </security>
    </system.webServer>
    

    Az IIS Manager által a <system.webServer> fájlhoz hozzáadott szakasz nincs összhangban a .NET SDK által az alkalmazás közzétételekor hozzáadott <location> szakaszával. Mivel a szakasz a <location> csomóponton kívül van hozzáadva, ezért az aktuális alkalmazás bármely alalkalmazása örökli a beállításokat. Az öröklés megakadályozása érdekében helyezze át a hozzáadott <security> szakaszt a <location><system.webServer> .NET SDK által megadott szakaszba.

    Ha az IIS Managert használja az IIS-konfiguráció hozzáadásához, az csak az alkalmazás web.config fájlját érinti a kiszolgálón. Az alkalmazás későbbi üzembe helyezése felülírhatja a kiszolgáló beállításait, ha a kiszolgáló web.config másolatát lecseréli a projekt web.config fájlja. A beállítások kezeléséhez használja az alábbi módszerek egyikét :

    • Az IIS Managerrel alaphelyzetbe állíthatja a beállításokat aweb.config fájlban, miután a fájl felülíródott az üzembe helyezéskor.
    • Adjon hozzá egyweb.config fájlt az alkalmazáshoz helyileg a beállításokkal.

Kestrel

A Microsoft.AspNetCore.Authentication.Negotiate NuGet-csomag a Windows-hitelesítés támogatásához Kestrel használható a Negotiate és a Kerberos használatával Windows, Linux és macOS rendszeren.

Warning

A hitelesítő adatok a kapcsolaton belüli kérések között is megőrizhetők. A "Negotiate" hitelesítés nem használható proxykkal, kivéve ha a proxy 1:1 kapcsolati affinitást (állandó kapcsolatot) tart fenn Kestrel-vel.

Note

Az Egyeztetés kezelője észleli, hogy a mögöttes kiszolgáló natív módon támogatja-e a Windows-hitelesítést, és hogy engedélyezve van-e. Ha a kiszolgáló támogatja a Windows-hitelesítést, de le van tiltva, hibaüzenet jelenik meg, amely arra kéri, hogy engedélyezze a kiszolgáló implementálását. Ha a Windows-hitelesítés engedélyezve van a kiszolgálón, az Egyeztetés kezelő transzparens módon továbbítja a hitelesítési kéréseket.

Hitelesítési szolgáltatások hozzáadása AddAuthentication és AddNegotiate invokálásával a(z) Startup.ConfigureServices-ben.

// using Microsoft.AspNetCore.Authentication.Negotiate;
// using Microsoft.Extensions.DependencyInjection;

services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
   .AddNegotiate();

Hitelesítés middleware hozzáadása a UseAuthentication meghívásával a Startup.Configure-ben.

app.UseAuthentication();

További információ a köztes szoftverről: ASP.NET Core Middleware.

Kerberos-hitelesítés és szerepköralapú hozzáférés-vezérlés (RBAC)

A Kerberos-hitelesítés Linuxon vagy macOS rendszeren nem biztosít szerepkör-információkat a hitelesített felhasználók számára. Ha szerepkör- és csoportadatokat szeretne hozzáadni egy Kerberos-felhasználóhoz, a hitelesítési kezelőt úgy kell konfigurálni, hogy lekérje a szerepköröket egy LDAP-tartományból. A legalapvetőbb konfiguráció csak egy LDAP-tartományt határoz meg, amely alapján lekérdezhetők, és a hitelesített felhasználó környezetét fogja használni az LDAP-tartomány lekérdezéséhez:

services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
    .AddNegotiate(options =>
    {
        if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
        {
            options.EnableLdap("contoso.com");
        }
    });

Egyes konfigurációkhoz adott hitelesítő adatokra lehet szükség az LDAP-tartomány lekérdezéséhez. A hitelesítő adatok a következő kiemelt beállításokban adhatók meg:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDatabaseDeveloperPageExceptionFilter();
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();

    services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
        .AddNegotiate(options =>
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
            {
                options.EnableLdap(settings =>
                {
                    settings.Domain = "contoso.com";
                    settings.MachineAccountName = "machineName";
                    settings.MachineAccountPassword = Configuration["Password"]
                });
            }
        });

    services.AddRazorPages();
}

Alapértelmezés szerint az egyeztetési hitelesítési kezelő feloldja a beágyazott tartományokat. Nagy vagy bonyolult LDAP-környezetben a beágyazott tartományok feloldása lassú keresést vagy sok memóriát eredményezhet az egyes felhasználók számára. A beágyazott tartományfeloldás letiltható a IgnoreNestedGroups beállítással.

Névtelen kérések engedélyezettek. Az ASP.NET core authorization használatával kérje le a névtelen hitelesítési kérelmeket.

AuthenticationScheme Microsoft.AspNetCore.Authentication.Negotiate a NuGet-csomagra van szükség.

Windows-környezet konfigurálása

Az Microsoft.AspNetCore.Authentication.Negotiate APIfelhasználói módú hitelesítést hajt végre. A szolgáltatásnévneveket (SPN-eket) a szolgáltatást futtató felhasználói fiókhoz kell hozzáadni, nem a számítógépfiókhoz. Futtassa a setspn -S HTTP/myservername.mydomain.com myuser-t egy rendszergazdai parancshéjban.

Linux- és macOS-környezetkonfiguráció

A Linux vagy macOS rendszerű gépek Windows-tartományhoz való csatlakoztatására vonatkozó utasításokat az Azure Data Studio csatlakoztatása az SQL Serverhez Windows-hitelesítéssel – Kerberos-cikk tartalmazza. Az utasítások létrehoznak egy számítógépfiókot a tartomány Linux-gépéhez. Az SPN-eket hozzá kell adni a számítógépfiókhoz.

Note

Ha követi az Azure Data Studio csatlakoztatása az SQL Serverhez Windows-hitelesítéssel – Kerberos cikk útmutatását, cserélje le a python-software-properties elemet a python3-software-properties elemre, ha szükséges.

Miután a Linux- vagy macOS-gépet csatlakoztatta a tartományhoz, további lépések szükségesek az SPN-eket tartalmazó keytab-fájl biztosításához.

  • A tartományvezérlőn adjon hozzá új webszolgáltatás szolgáltatási főneveket (SPN-eket) a számítógépfiókhoz.
    • setspn -S HTTP/mywebservice.mydomain.com mymachine
    • setspn -S HTTP/mywebservice@MYDOMAIN.COM mymachine
  • Keytab-fájl létrehozása a ktpass használatával:
    • ktpass -princ HTTP/mywebservice.mydomain.com@MYDOMAIN.COM -pass myKeyTabFilePassword -mapuser MYDOMAIN\mymachine$ -pType KRB5_NT_PRINCIPAL -out c:\temp\mymachine.HTTP.keytab -crypto AES256-SHA1
    • Egyes mezőket nagybetűvel kell megadni a megadott módon.
  • Másolja a keytab fájlt a Linux vagy macOS gépre.
  • Válassza ki a keytab-fájlt egy környezeti változón keresztül: export KRB5_KTNAME=/tmp/mymachine.HTTP.keytab
  • Hívja meg a klist-t, hogy megjelenítse a jelenleg használatra elérhető egyszerű szolgáltatásneveket.

Note

A keytab-fájlok tartományi hozzáférési hitelesítő adatokat tartalmaznak, és ennek megfelelően kell védeni.

HTTP.sys

HTTP.sys támogatja a Kernel módú Windows-hitelesítést egyeztetés, NTLM vagy alapszintű hitelesítés használatával.

Hitelesítési szolgáltatások hozzáadása a AddAuthentication (Microsoft.AspNetCore.Server.HttpSys névtér) meghívásávalStartup.ConfigureServices:

services.AddAuthentication(HttpSysDefaults.AuthenticationScheme);

Állítsa be az alkalmazás webes gazdagépét úgy, hogy a HTTP.sys Windows-hitelesítéssel használja (Program.cs). UseHttpSys a névtérben Microsoft.AspNetCore.Server.HttpSys van.

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>()
                    .UseHttpSys(options =>
                    {
                        options.Authentication.Schemes = 
                            AuthenticationSchemes.NTLM | 
                            AuthenticationSchemes.Negotiate;
                        options.Authentication.AllowAnonymous = false;
                    });
            });
}

Note

HTTP.sys a Kernel Mode hitelesítéshez delegál a Kerberos hitelesítési protokollal. A Kerberos és a HTTP.sysnem támogatja a felhasználói módú hitelesítést. A számítógépfiókot kell használni az Active Directoryból beszerzett Kerberos-jogkivonat/jegy visszafejtéséhez, amelyet az ügyfél továbbít a kiszolgálónak a felhasználó hitelesítéséhez. Regisztrálja a gazdagép szolgáltatási főnevét (SPN), nem pedig az alkalmazás felhasználóját.

Note

HTTP.sys nem támogatott a Nano Server 1709-es verziótól kezdődően vagy annál újabb verziókban. Ha Windows-hitelesítést és HTTP.sys szeretne használni a Nano Serverrel, használjon egy Server Core-tárolót (microsoft/windowsservercore) (lásd https://hub.docker.com/_/microsoft-windows-servercore). További információ a Server Core-ról: Mi a Server Core telepítési lehetőség a Windows Serverben?

Felhasználók engedélyezése

A névtelen hozzáférés konfigurációs állapota határozza meg az alkalmazás és az [Authorize][AllowAnonymous] attribútumok használatát. Az alábbi két szakasz ismerteti, hogyan kezelhetők a névtelen hozzáférés nem engedélyezett és engedélyezett konfigurációs állapotai.

Névtelen hozzáférés letiltása

Ha a Windows-hitelesítés engedélyezve van, és a névtelen hozzáférés le van tiltva, az [Authorize] és [AllowAnonymous] attribútumok nem lesznek hatással. Ha egy IIS-webhely úgy van konfigurálva, hogy letiltsa a névtelen hozzáférést, a kérés soha nem éri el az alkalmazást. Ezért az [AllowAnonymous] attribútum nem alkalmazható.

Névtelen hozzáférés engedélyezése

Ha a Windows-hitelesítés és a névtelen hozzáférés is engedélyezve van, használja a [Authorize] és [AllowAnonymous] attribútumokat. Az [Authorize] attribútum lehetővé teszi az alkalmazás hitelesítést igénylő végpontjainak védelmét. Az [AllowAnonymous] attribútum felülírja az attribútumot a [Authorize] névtelen hozzáférést lehetővé tevő alkalmazásokban. Az attribútumhasználat részleteiért lásd: Egyszerű engedélyezés a ASP.NET Core-ban.

Note

Alapértelmezés szerint azok a felhasználók, akik nem rendelkeznek engedéllyel egy lap elérésére, üres HTTP 403-válasz jelenik meg. A StatusCodePages Middleware konfigurálható úgy, hogy jobb "Hozzáférés megtagadva" élményt biztosítson a felhasználóknak.

Impersonation

ASP.NET Core nem valósít megszemélyesítést. Az alkalmazások az alkalmazás identitásával futnak minden kérésnél, az alkalmazáskészlet vagy a folyamat identitásának használatával. Ha az alkalmazásnak egy felhasználó nevében kell végrehajtania egy műveletet, használja a WindowsIdentity.RunImpersonated vagy RunImpersonatedAsync a végső közvetítő réteget a Startup.Configure helyen. Futtasson egyetlen műveletet ebben a környezetben, majd zárja be a környezetet.

app.Run(async (context) =>
{
    try
    {
        var user = (WindowsIdentity)context.User.Identity;

        await context.Response
            .WriteAsync($"User: {user.Name}\tState: {user.ImpersonationLevel}\n");

        WindowsIdentity.RunImpersonated(user.AccessToken, () =>
        {
            var impersonatedUser = WindowsIdentity.GetCurrent();
            var message =
                $"User: {impersonatedUser.Name}\t" +
                $"State: {impersonatedUser.ImpersonationLevel}";

            var bytes = Encoding.UTF8.GetBytes(message);
            context.Response.Body.Write(bytes, 0, bytes.Length);
        });
    }
    catch (Exception e)
    {
        await context.Response.WriteAsync(e.ToString());
    }
});

Bár a csomag engedélyezi a Microsoft.AspNetCore.Authentication.Negotiate hitelesítést Windows, Linux és macOS rendszeren, a megszemélyesítés csak Windows rendszeren támogatott.

Jogcímátalakítások

Az IIS-sel AuthenticateAsync való üzemeltetéskor nem kerül belsőleg meghívásra a felhasználó inicializálásához. Ezért egy IClaimsTransformation implementáció, amelyet a jogcímek minden hitelesítés utáni átalakítására használnak, alapértelmezés szerint nincs aktiválva. További információ és a jogcímátalakításokat aktiváló kód példája: Különbségek a folyamatban lévő és a folyamaton kívüli üzemeltetés között.

További erőforrások