Konfigurace ověřování systému Windows v ASP.NET Core
Ověřování systému Windows (označované také jako Negotiate, Kerberos nebo ověřování NTLM) lze nakonfigurovat pro ASP.NET Core aplikace hostované službou IIS, Kestrelnebo HTTP.sys.
Ověřování systému Windows (označované také jako Negotiate, Kerberos nebo ověřování NTLM) lze nakonfigurovat pro ASP.NET Core aplikace hostované službou IIS nebo HTTP.sys.
Ověřování systému Windows využívá operační systém k ověřování uživatelů aplikací ASP.NET Core. Ověřování systému Windows můžete použít, pokud server běží na podnikové síti pomocí identit domény služby Active Directory nebo účtů systému Windows k identifikaci uživatelů. Ověřování systému Windows je nejvhodnější pro intranetová prostředí, kde uživatelé, klientské aplikace a webové servery patří do stejné domény systému Windows.
Poznámka
Ověřování systému Windows není u protokolu HTTP/2 podporováno. Výzvy k ověřování se dají odesílat na odpovědi HTTP/2, ale klient se musí před ověřením snížit na HTTP/1.1.
Scénáře proxy a nástroje pro vyrovnávání zatížení
Ověřování systému Windows je stavový scénář primárně používaný v intranetu, kde proxy server nebo nástroj pro vyrovnávání zatížení obvykle nezpracovává přenos mezi klienty a servery. Pokud se používá proxy server nebo nástroj pro vyrovnávání zatížení, funguje ověřování systému Windows pouze v případě, že proxy server nebo nástroj pro vyrovnávání zatížení:
- Zpracovává ověřování.
- Předá do aplikace informace o ověřování uživatele (například v hlavičce požadavku), která funguje na ověřovacích informacích.
Alternativou k ověřování Windows v prostředích, kde se používají proxy a služby Vyrovnávání zatížení, je služba AD FS (Active Directory federovaných služeb) se službou OpenID Connect (OIDC).
Služba IIS/IIS Express
Přidejte ověřovací služby vyvoláním AddAuthentication ( Microsoft.AspNetCore.Server.IISIntegration namespace) v Startup.ConfigureServices :
services.AddAuthentication(IISDefaults.AuthenticationScheme);
Nastavení spuštění (ladicí program)
Konfigurace pro nastavení spuštění má vliv pouze na vlastnosti/launchSettings.jsv souboru pro IIS Express a NEKONFIGURUJE službu IIS pro ověřování systému Windows. Konfigurace serveru je vysvětlena v části IIS .
Šablona webové aplikace , která je k dispozici prostřednictvím sady Visual Studio, nebo .NET Core CLI lze nakonfigurovat pro podporu ověřování systému Windows, která automaticky aktualizuje vlastnosti/launchSettings.jsv souboru.
Nový projekt
- Vytvoření nového projektu
- Vyberte ASP.NET Core webové aplikace. Vyberte Další.
- Do pole název projektu zadejte název. Potvrďte správnost záznamu umístění nebo zadejte umístění projektu. Vyberte Vytvořit.
- V části ověřovánívyberte změnit .
- V okně změnit ověřování vyberte ověřování systému Windows. Vyberte OK.
- Vyberte Webová aplikace.
- Vyberte Vytvořit.
Spusťte aplikaci. Uživatelské jméno se zobrazí v uživatelském rozhraní vykreslené aplikace.
Existující projekt
Vlastnosti projektu umožňují ověřování systému Windows a zakázání anonymního ověřování:
- Klikněte pravým tlačítkem na projekt v Průzkumník řešení a vyberte vlastnosti.
- Vyberte kartu ladit .
- Zrušte zaškrtnutí políčka Povolit anonymní ověřování.
- Zaškrtněte políčko Povolit ověřování systému Windows.
- Uložte a zavřete stránku vlastností.
Případně lze vlastnosti nakonfigurovat v iisSettings uzlu launchSettings.jsv souboru:
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false,
"iisExpress": {
"applicationUrl": "http://localhost:52171/",
"sslPort": 44308
}
}
Při úpravách existujícího projektu potvrďte, že soubor projektu obsahuje odkaz na balíček pro Microsoft. AspNetCore. app Metapackage nebo balíček NuGet Microsoft. AspNetCore. Authentication .
IIS
Služba IIS používá modul ASP.NET Core k hostování ASP.NET Corech aplikací. Ověřování systému Windows je konfigurováno pro službu IIS prostřednictvím souboru web.config . Následující části ukazují, jak:
- Zadejte místní web.config soubor, který aktivuje ověřování systému Windows na serveru při nasazení aplikace.
- Pomocí Správce služby IIS nakonfigurujte web.config soubor aplikace ASP.NET Core, která už je nasazená na serveru.
Pokud jste to ještě neudělali, povolte službě IIS hostování aplikací ASP.NET Core. Další informace naleznete v tématu hostování ASP.NET Core v Windows se službou IIS.
Povolte službu role IIS pro ověřování systému Windows. Další informace najdete v tématu Povolení ověřování systému Windows v rolích služby IIS (viz krok 2).
Služba IIS Integration middleware je nakonfigurována pro automatické ověřování požadavků ve výchozím nastavení. Další informace najdete v tématu hostitelská ASP.NET Core ve Windows se službou IIS: možnosti služby IIS (AutomaticAuthentication).
Modul ASP.NET Core je nakonfigurován tak, aby ve výchozím nastavení předal token ověřování systému Windows do aplikace. Další informace najdete v tématu Referenční příručka konfigurace modulu ASP.NET Core: atributy elementu aspNetCore.
Použijte některý z následujících přístupů:
Před publikováním a nasazením projektu přidejte následující soubor web.config do kořenového adresáře projektu:
<?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>Pokud je projekt publikován pomocí .NET Core SDK (bez
<IsTransformWebConfigDisabled>vlastnosti nastavenou na hodnotutruev souboru projektu), publikovaný soubor web.config obsahuje<location><system.webServer><security><authentication>oddíl. Další informace o této<IsTransformWebConfigDisabled>vlastnosti naleznete v tématu hostování ASP.NET Core v Windows se službou IIS .Po publikování a nasazení projektu proveďte u správce služby IIS konfiguraci na straně serveru:
- Ve Správci služby IIS vyberte v uzlu lokality na postranním panelu připojení web služby IIS.
- Dvakrát klikněte na ověřování v oblasti IIS .
- Vyberte anonymní ověřování. Na bočním panelu Akce vyberte Zakázat .
- Vyberte ověřování systému Windows. Na postranním panelu Akce vyberte Povolit .
Při těchto akcích Správce služby IIS upraví soubor web.config aplikace.
<system.webServer><security><authentication>Uzel je přidán s aktualizovaným nastavením proanonymousAuthenticationawindowsAuthentication:<system.webServer> <security> <authentication> <anonymousAuthentication enabled="false" /> <windowsAuthentication enabled="true" /> </authentication> </security> </system.webServer><system.webServer>Oddíl přidaný do souboru web.config správcem služby IIS je mimo<location>oddíl aplikace přidaný .NET Core SDK při publikování aplikace. Vzhledem k tomu, že část je přidána mimo<location>uzel, nastavení jsou děděna všemi podaplikacemi do aktuální aplikace. Chcete-li zabránit dědění, přesuňte přidaný<security>oddíl do<location><system.webServer>oddílu, který .NET Core SDK poskytl.Když se k přidání konfigurace služby IIS použije Správce služby IIS, ovlivní to jenom web.config souboru aplikace na serveru. Následné nasazení aplikace může přepsat nastavení na serveru, pokud je kopie web.config serveru nahrazena web.configm souborem projektu. Ke správě nastavení použijte některý z následujících přístupů:
- Pomocí Správce služby IIS obnovte nastavení v souboru web.config poté, co je soubor po nasazení přepsán.
- Do aplikace lokálně přidejte souborweb.config s nastavením.
Kestrel
Balíček NuGet Microsoft. AspNetCore. Authentication. Negotiate se dá použít s Kestrel k podpoře ověřování systému Windows pomocí dohadování a protokolu Kerberos v systémech Windows, Linux a MacOS.
Upozornění
Přihlašovací údaje je možné zachovat v rámci požadavků na připojení. Ověřování Negotiate se nesmí používat s proxy servery, pokud proxy neudržuje spřažení připojení 1:1 (trvalé připojení) pomocí Kestrel.
Poznámka
Obslužná rutina Negotiate detekuje, jestli základní server podporuje ověřování systému Windows nativně a jestli je povolený. Pokud server podporuje ověřování systému Windows, ale je zakázaný, vyvolá se chyba s výzvou, abyste povolili implementaci serveru. Pokud je na serveru povoleno ověřování systému Windows, obslužná rutina Negotiate ji transparentně přepošle.
Přidejte ověřovací služby vyvoláním AddAuthentication a AddNegotiate v Startup.ConfigureServices :
// using Microsoft.AspNetCore.Authentication.Negotiate;
// using Microsoft.Extensions.DependencyInjection;
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
.AddNegotiate();
Přidejte middleware ověřování voláním UseAuthentication Startup.Configure :
app.UseAuthentication();
Další informace o middlewaru naleznete v tématu ASP.NET Core Jiné .
Anonymní požadavky jsou povoleny. K ověření anonymních žádostí o ověření použijte ASP.NET Core autorizaci .
Konfigurace prostředí Windows
Komponenta Microsoft. AspNetCore. Authentication. Negotiate provádí ověřování v uživatelském režimu. Hlavní názvy služeb (SPN) musí být přidány do uživatelského účtu, který spouští službu, nikoli z účtu počítače. Spustit setspn -S HTTP/myservername.mydomain.com myuser v příkazovém prostředí pro správu.
Konfigurace prostředí Linux a macOS
Pokyny pro připojení počítače se systémem Linux nebo macOS k doméně systému Windows jsou k dispozici v tématu připojení Azure Data Studio k vašemu SQL Server pomocí ověřování systému Windows – Kerberos . Pokyny vytvoří účet počítače pro počítač se systémem Linux v doméně. Do tohoto účtu počítače se musí přidat hlavní názvy služby (SPN).
Poznámka
Pokud budete postupovat podle pokynů v Azure Data Studio připojit k vašemu SQL Server pomocí ověřování systému Windows – Kerberos , python-software-properties v python3-software-properties případě potřeby nahraďte.
Jakmile je počítač se systémem Linux nebo macOS připojený k doméně, jsou potřeba další kroky k poskytnutí souboru keytab s názvy SPN:
- Na řadiči domény přidejte nové hlavní názvy služby webu k účtu počítače:
setspn -S HTTP/mywebservice.mydomain.com mymachinesetspn -S HTTP/mywebservice@MYDOMAIN.COM mymachine
- K vygenerování souboru keytab použijte Ktpass :
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- Některá pole musí být zadána velkými písmeny, jak je uvedeno.
- Zkopírujte soubor keytab do počítače se systémem Linux nebo macOS.
- Vyberte soubor keytab přes proměnnou prostředí:
export KRB5_KTNAME=/tmp/mymachine.HTTP.keytab - Invoke
klistpro zobrazení hlavních názvů služby, které jsou aktuálně k dispozici pro použití.
Poznámka
Soubor keytab obsahuje přihlašovací údaje pro přístup k doméně a musí být vhodným způsobem chráněn.
HTTP.sys
HTTP.sys podporuje ověřování systému Windows v režimu jádra pomocí ověřování Negotiate, NTLM nebo Basic.
Přidejte ověřovací služby vyvoláním AddAuthentication ( Microsoft.AspNetCore.Server.HttpSys namespace) v Startup.ConfigureServices :
services.AddAuthentication(HttpSysDefaults.AuthenticationScheme);
Nakonfigurujte webového hostitele aplikace tak, aby používal HTTP.sys s ověřováním systému Windows (program.cs). UseHttpSysje v Microsoft.AspNetCore.Server.HttpSys oboru názvů.
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;
});
});
}
public class Program
{
public static void Main(string[] args) =>
BuildWebHost(args).Run();
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseHttpSys(options =>
{
options.Authentication.Schemes =
AuthenticationSchemes.NTLM |
AuthenticationSchemes.Negotiate;
options.Authentication.AllowAnonymous = false;
})
.Build();
}
Poznámka
HTTP.sys deleguje ověřování režimu jádra pomocí ověřovacího protokolu Kerberos. Ověřování pomocí uživatelského režimu není pro protokol Kerberos a HTTP.sys podporováno. Účet počítače se musí použít k dešifrování tokenu nebo lístku protokolu Kerberos, který je získaný ze služby Active Directory a který přesměruje klient na server za účelem ověření uživatele. Zaregistrujte hlavní název služby (SPN) pro hostitele, nikoli uživatele aplikace.
Poznámka
HTTP.sys se na nano serveru verze 1709 nebo novější nepodporují. Pokud chcete používat ověřování Windows a HTTP.sys s Nano serverem, použijte kontejner jádro serveru (Microsoft/windowsservercore). Další informace o jádru serveru najdete v tématu co je možnost instalace jádra serveru ve Windows serveru.
Autorizovat uživatele
Stav konfigurace anonymního přístupu určuje způsob, jakým se v [Authorize] [AllowAnonymous] aplikaci používají atributy a. Následující dvě části vysvětlují, jak zpracovat nepovolené a povolené stavy Konfigurace anonymního přístupu.
Zakázat anonymní přístup
Pokud je povoleno ověřování systému Windows a je zakázán anonymní přístup, [Authorize] [AllowAnonymous] atributy a nemají žádný vliv. Pokud je lokalita IIS nakonfigurovaná tak, aby povolovala anonymní přístup, požadavek nikdy nedosáhne vaší aplikace. Z tohoto důvodu se [AllowAnonymous] atribut nedá použít.
Povolení anonymního přístupu
Pokud je povoleno ověřování systému Windows i anonymní přístup, použijte [Authorize] atributy a [AllowAnonymous] . [Authorize]Atribut umožňuje zabezpečit koncové body aplikace, které vyžadují ověření. [AllowAnonymous]Atribut Přepisuje [Authorize] atribut v aplikacích, které povolují anonymní přístup. Podrobnosti o použití atributů naleznete v tématu Jednoduchá autorizace v ASP.NET Core .
Poznámka
Ve výchozím nastavení se uživatelům, kteří nemají oprávnění k přístupu na stránku, zobrazí prázdná odpověď HTTP 403. Middleware StatusCodePages se dá nakonfigurovat tak, aby poskytoval uživatelům lepší přístup "přístup byl odepřen".
Zosobnění
ASP.NET Core neimplementuje zosobnění. Aplikace se spouštějí s identitou aplikace pro všechny žádosti pomocí fondu aplikací nebo identity procesu. Pokud by aplikace měla provést akci jménem uživatele, použijte WindowsIdentity. RunImpersonated v middlewaru vloženého terminálu v Startup.Configure . Spusťte v tomto kontextu jednu akci a pak kontext zavřete.
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());
}
});
RunImpersonatednepodporuje asynchronní operace a neměl by se používat pro složité scénáře. Například zabalení všech požadavků nebo řetězů middleware není podporováno ani doporučeno.
I když balíček Microsoft. AspNetCore. Authentication. Negotiate umožňuje ověřování v systémech Windows, Linux a MacOS, zosobnění je podporováno pouze v systému Windows.
Transformace deklarací identity
Při hostování se službou IIS AuthenticateAsync není volána interně k inicializaci uživatele. Proto IClaimsTransformation implementace používaná k transformaci deklarací po každém ověření není ve výchozím nastavení aktivována. Další informace a příklad kódu, který aktivuje transformace deklarací identity, najdete v tématu Modul ASP.NET Core .
Při hostování v režimu vnitroprocesové v rámci služby IIS AuthenticateAsync není volána interně k inicializaci uživatele. Proto IClaimsTransformation implementace používaná k transformaci deklarací po každém ověření není ve výchozím nastavení aktivována. Další informace a příklad kódu, který aktivuje transformace deklarací při hostování v procesu, naleznete v tématu Modul ASP.NET Core .