Configurare l'autenticazione di Windows in ASP.NET CoreConfigure Windows Authentication in ASP.NET Core

Dal Scott Addie e Luke LathamBy Scott Addie and Luke Latham

L'autenticazione di Windows (noto anche come autenticazione Negotiate, Kerberos o NTLM) può essere configurato per le app ASP.NET Core ospitate con IIS, Kestrel, o HTTP. sys .Windows Authentication (also known as Negotiate, Kerberos, or NTLM authentication) can be configured for ASP.NET Core apps hosted with IIS, Kestrel, or HTTP.sys.

L'autenticazione di Windows (noto anche come autenticazione Negotiate, Kerberos o NTLM) può essere configurato per le app ASP.NET Core ospitate con IIS oppure HTTP. sys.Windows Authentication (also known as Negotiate, Kerberos, or NTLM authentication) can be configured for ASP.NET Core apps hosted with IIS or HTTP.sys.

L'autenticazione di Windows si basa sul sistema operativo per autenticare gli utenti delle App ASP.NET Core.Windows Authentication relies on the operating system to authenticate users of ASP.NET Core apps. È possibile usare l'autenticazione di Windows quando il server in esecuzione in una rete aziendale usando le identità di dominio Active Directory o account di Windows per identificare gli utenti.You can use Windows Authentication when your server runs on a corporate network using Active Directory domain identities or Windows accounts to identify users. L'autenticazione di Windows è più adatta agli ambienti intranet in cui gli utenti, le app client e server web appartengono allo stesso dominio di Windows.Windows Authentication is best suited to intranet environments where users, client apps, and web servers belong to the same Windows domain.

Nota

L'autenticazione di Windows non è supportata con HTTP/2.Windows Authentication isn't supported with HTTP/2. Problemi di autenticazione possono essere inviati nelle risposte HTTP/2, ma il client deve effettuare il downgrade al protocollo HTTP/1.1 prima l'autenticazione.Authentication challenges can be sent on HTTP/2 responses, but the client must downgrade to HTTP/1.1 before authenticating.

IIS/IIS ExpressIIS/IIS Express

Aggiungere servizi di autenticazione richiamando AddAuthentication (Microsoft.AspNetCore.Server.IISIntegration dello spazio dei nomi) in Startup.ConfigureServices:Add authentication services by invoking AddAuthentication (Microsoft.AspNetCore.Server.IISIntegration namespace) in Startup.ConfigureServices:

services.AddAuthentication(IISDefaults.AuthenticationScheme);

Avviare le impostazioni (debugger)Launch settings (debugger)

Configurazione per le impostazioni di avvio interessa solo il Properties/launchSettings.json per IIS Express e non configurare IIS per l'autenticazione di Windows.Configuration for launch settings only affects the Properties/launchSettings.json file for IIS Express and doesn't configure IIS for Windows Authentication. Configurazione del server viene illustrata nel IIS sezione.Server configuration is explained in the IIS section.

Il applicazione Web modello disponibile tramite la CLI di .NET Core o Visual Studio possono essere configurato per supportare l'autenticazione di Windows, che aggiorna il Properties/launchSettings.json file automaticamente.The Web Application template available via Visual Studio or the .NET Core CLI can be configured to support Windows Authentication, which updates the Properties/launchSettings.json file automatically.

nuovo progettoNew project

  1. Creare un nuovo progetto.Create a new project.
  2. Selezionare Applicazione Web ASP.NET Core.Select ASP.NET Core Web Application. Scegliere Avanti.Select Next.
  3. Specificare un nome nella nome progetto campo.Provide a name in the Project name field. Verificare i posizione voce sia corretta o specificare un percorso per il progetto.Confirm the Location entry is correct or provide a location for the project. Scegliere Crea.Select Create.
  4. Selezionare Change sotto autenticazione.Select Change under Authentication.
  5. Nel Modifica autenticazione finestra, seleziona l'autenticazione di Windows.In the Change Authentication window, select Windows Authentication. Scegliere OK.Select OK.
  6. Selezionare Applicazione Web.Select Web Application.
  7. Scegliere Crea.Select Create.

Eseguire l'app.Run the app. Il nome utente viene visualizzato nell'interfaccia utente dell'app sottoposto a rendering.The username appears in the rendered app's user interface.

Progetto esistenteExisting project

Le proprietà del progetto abilita l'autenticazione di Windows e disattivano l'autenticazione anonima:The project's properties enable Windows Authentication and disable Anonymous Authentication:

  1. Fare clic con il pulsante destro del mouse in Esplora soluzioni e scegliere Proprietà.Right-click the project in Solution Explorer and select Properties.
  2. Selezionare la scheda Debug.Select the Debug tab.
  3. Deselezionare la casella di controllo abilitare l'autenticazione anonima.Clear the check box for Enable Anonymous Authentication.
  4. Selezionare la casella di controllo abilitare l'autenticazione di Windows.Select the check box for Enable Windows Authentication.
  5. Salvare e chiudere la pagina delle proprietà.Save and close the property page.

In alternativa, è possibile configurare le proprietà nel iisSettings nodo il launchsettings. JSON file:Alternatively, the properties can be configured in the iisSettings node of the launchSettings.json file:

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

Quando si modifica un progetto esistente, verificare che il file di progetto include un riferimento al pacchetto per il metapacchetto Microsoft.AspNetCore.App oppure il Microsoft.AspNetCore.Authentication pacchetto NuGet.When modifying an existing project, confirm that the project file includes a package reference for the Microsoft.AspNetCore.App metapackage or the Microsoft.AspNetCore.Authentication NuGet package.

IISIIS

IIS Usa il modulo di ASP.NET Core per ospitare App ASP.NET Core.IIS uses the ASP.NET Core Module to host ASP.NET Core apps. L'autenticazione di Windows è configurato per IIS tramite il Web. config file.Windows Authentication is configured for IIS via the web.config file. Le sezioni seguenti mostrano come:The following sections show how to:

  • Specificare una variabile locale Web. config file che attiva l'autenticazione di Windows nel server quando l'app viene distribuita.Provide a local web.config file that activates Windows Authentication on the server when the app is deployed.
  • Usare Gestione IIS per configurare il Web. config file di un'app ASP.NET Core che è già stata distribuita nel server.Use the IIS Manager to configure the web.config file of an ASP.NET Core app that has already been deployed to the server.

Se non già stato fatto, abilitare IIS per ospitare App ASP.NET Core.If you haven't already done so, enable IIS to host ASP.NET Core apps. Per altre informazioni, vedere Host ASP.NET Core in Windows con IIS.For more information, see Host ASP.NET Core in Windows con IIS.

Abilitare il servizio ruolo IIS per l'autenticazione di Windows.Enable the IIS Role Service for Windows Authentication. Per altre informazioni, vedere abilitare l'autenticazione di Windows nei servizi di ruolo IIS (vedere il passaggio 2).For more information, see Enable Windows Authentication in IIS Role Services (see Step 2).

Middleware di integrazione IIS è configurato per autenticare automaticamente le richieste per impostazione predefinita.IIS Integration Middleware is configured to automatically authenticate requests by default. Per altre informazioni, vedere Host ASP.NET Core in Windows con IIS: Le opzioni di IIS (AutomaticAuthentication).For more information, see Host ASP.NET Core on Windows with IIS: IIS options (AutomaticAuthentication).

Per impostazione predefinita, il modulo ASP.NET Core è configurato per inoltrare il token di autenticazione di Windows per l'app.The ASP.NET Core Module is configured to forward the Windows Authentication token to the app by default. Per altre informazioni, vedere riferimento configurazione modulo ASP.NET Core: Attributi dell'elemento aspNetCore.For more information, see ASP.NET Core Module configuration reference: Attributes of the aspNetCore element.

Uso entrambi degli approcci seguenti:Use either of the following approaches:

  • Prima della pubblicazione e la distribuzione del progetto aggiungere il codice seguente Web. config file alla radice del progetto:Before publishing and deploying the project, add the following web.config file to the project root:

    <?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>
    

    Quando il progetto viene pubblicato per .NET Core SDK (senza il <IsTransformWebConfigDisabled> impostata su true nel file di progetto), pubblicato Web. config file include il <location><system.webServer><security><authentication> sezione.When the project is published by the .NET Core SDK (without the <IsTransformWebConfigDisabled> property set to true in the project file), the published web.config file includes the <location><system.webServer><security><authentication> section. Per altre informazioni sul <IsTransformWebConfigDisabled> proprietà, vedere Host ASP.NET Core in Windows con IIS.For more information on the <IsTransformWebConfigDisabled> property, see Host ASP.NET Core in Windows con IIS.

  • Dopo la pubblicazione e la distribuzione del progetto, eseguire la configurazione lato server con Gestione IIS:After publishing and deploying the project, perform server-side configuration with the IIS Manager:

    1. In Gestione IIS selezionare il sito IIS sotto il siti nodo del connessioni nella barra laterale.In IIS Manager, select the IIS site under the Sites node of the Connections sidebar.
    2. Fare doppio clic su Authentication nel IIS area.Double-click Authentication in the IIS area.
    3. Selezionare l'autenticazione anonima.Select Anonymous Authentication. Selezionare disabilitare nel azioni nella barra laterale.Select Disable in the Actions sidebar.
    4. Selezionare Windows autenticazione.Select Windows Authentication. Selezionare abilitare nel azioni nella barra laterale.Select Enable in the Actions sidebar.

    Quando vengono eseguite queste operazioni, Gestione IIS modifica dell'app Web. config file.When these actions are taken, IIS Manager modifies the app's web.config file. Oggetto <system.webServer><security><authentication> nodo viene aggiunto con impostazioni aggiornate per anonymousAuthentication e windowsAuthentication:A <system.webServer><security><authentication> node is added with updated settings for anonymousAuthentication and windowsAuthentication:

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

    Il <system.webServer> aggiunto alla sezione di Web. config file da Gestione IIS è di fuori dell'app <location> sezione aggiunte per .NET Core SDK quando la pubblicazione dell'app.The <system.webServer> section added to the web.config file by IIS Manager is outside of the app's <location> section added by the .NET Core SDK when the app is published. Poiché la sezione viene aggiunta di fuori del <location> nodo, le impostazioni vengono ereditate da qualsiasi App secondarie all'app corrente.Because the section is added outside of the <location> node, the settings are inherited by any sub-apps to the current app. Per impedire l'ereditarietà, spostare l'aggiunta <security> all'interno della sezione di <location><system.webServer> sezione che .NET Core SDK fornito.To prevent inheritance, move the added <security> section inside of the <location><system.webServer> section that the .NET Core SDK provided.

    Quando Gestione IIS consente di aggiungere la configurazione di IIS, questo interessa solo l'app Web. config file sul server.When IIS Manager is used to add the IIS configuration, it only affects the app's web.config file on the server. Una distribuzione dell'app per le successive possa sovrascrivere le impostazioni nel server se la copia del server del Web. config viene sostituita da del progetto Web. config file.A subsequent deployment of the app may overwrite the settings on the server if the server's copy of web.config is replaced by the project's web.config file. Uso entrambi degli approcci seguenti per gestire le impostazioni:Use either of the following approaches to manage the settings:

    • Utilizzare Gestione IIS per reimpostare le impostazioni nel Web. config file dopo che il file viene sovrascritto nella distribuzione.Use IIS Manager to reset the settings in the web.config file after the file is overwritten on deployment.
    • Aggiungere un file Web. config all'app in locale con le impostazioni.Add a web.config file to the app locally with the settings.

KestrelKestrel

Il Microsoft.AspNetCore.Authentication.Negotiate pacchetto NuGet può essere utilizzato con Kestrel per supportare l'autenticazione di Windows utilizzando Negotiate, Kerberos e NTLM su Windows, Linux e macOS.The Microsoft.AspNetCore.Authentication.Negotiate NuGet package can be used with Kestrel to support Windows Authentication using Negotiate, Kerberos, and NTLM on Windows, Linux, and macOS.

Avviso

Credenziali possono essere reso persistente tra le richieste su una connessione.Credentials can be persisted across requests on a connection. Negozia l'autenticazione non deve essere usata con i proxy, a meno che il proxy mantiene un'affinità di connessione 1:1 (una connessione permanente) con Kestrel.Negotiate authentication must not be used with proxies unless the proxy maintains a 1:1 connection affinity (a persistent connection) with Kestrel.

Nota

Il gestore Negotiate rileva se il server sottostante supporta l'autenticazione di Windows in modo nativo e se è abilitato.The Negotiate handler detects if the underlying server supports Windows Authentication natively and if it's enabled. Se il server supporta l'autenticazione di Windows, ma è disabilitato, viene generato un errore che chiede di consentire l'implementazione del server.If the server supports Windows Authentication but it's disabled, an error is thrown asking you to enable the server implementation. Quando è abilitata l'autenticazione di Windows nel server, il gestore Negotiate inoltra in modo trasparente ad esso.When Windows Authentication is enabled in the server, the Negotiate handler transparently forwards to it.

Aggiungere servizi di autenticazione richiamando AddAuthentication (Microsoft.AspNetCore.Authentication.Negotiate dello spazio dei nomi) e AddNegotitate (Microsoft.AspNetCore.Authentication.Negotiate dello spazio dei nomi) in Startup.ConfigureServices:Add authentication services by invoking AddAuthentication (Microsoft.AspNetCore.Authentication.Negotiate namespace) and AddNegotitate (Microsoft.AspNetCore.Authentication.Negotiate namespace) in Startup.ConfigureServices:

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

Aggiungere il Middleware di autenticazione chiamando UseAuthentication in Startup.Configure:Add Authentication Middleware by calling UseAuthentication in Startup.Configure:

app.UseAuthentication();

app.UseMvc();

Per altre informazioni sul middleware, vedere Middleware di ASP.NET Core.For more information on middleware, see Middleware di ASP.NET Core.

Sono consentite richieste anonime.Anonymous requests are allowed. Uso autorizzazione ASP.NET Core per stimolare le richieste anonime per l'autenticazione.Use ASP.NET Core Authorization to challenge anonymous requests for authentication.

Configurazione dell'ambiente di WindowsWindows environment configuration

Il Microsoft.AspNetCore.Authentication.Negotiate componente esegue l'autenticazione in modalità utente.The Microsoft.AspNetCore.Authentication.Negotiate component performs User Mode authentication. Nomi dell'entità servizio (SPN) deve essere aggiunto all'account utente che esegue il servizio, non l'account del computer.Service Principal Names (SPNs) must be added to the user account running the service, not the machine account. Eseguire setspn -S HTTP/mysrevername.mydomain.com myuser in una shell dei comandi amministrativo.Execute setspn -S HTTP/mysrevername.mydomain.com myuser in an administrative command shell.

Configurazione dell'ambiente di Linux e macOSLinux and macOS environment configuration

Le istruzioni per la partecipazione a un computer Linux o macOS a un dominio di Windows sono disponibili nel connessione di Studio di Azure Data a SQL Server utilizzando l'autenticazione di Windows - Kerberos articolo.Instructions for joining a Linux or macOS machine to a Windows domain are available in the Connect Azure Data Studio to your SQL Server using Windows authentication - Kerberos article. Le istruzioni di creare un account computer per il computer Linux nel dominio.The instructions create a machine account for the Linux machine on the domain. I nomi SPN devono essere aggiunto a tale account del computer.SPNs must be added to that machine account.

Nota

Quando si seguono le istruzioni fornite nel connessione di Studio di Azure Data a SQL Server utilizzando l'autenticazione di Windows - Kerberos articolo, sostituire python-software-properties con python3-software-properties se necessario.When following the guidance in the Connect Azure Data Studio to your SQL Server using Windows authentication - Kerberos article, replace python-software-properties with python3-software-properties if needed.

Quando il computer Linux o macOS è aggiunto al dominio, sono necessari passaggi aggiuntivi per fornire una file keytab con i nomi SPN:Once the Linux or macOS machine is joined to the domain, additional steps are required to provide a keytab file with the SPNs:

  • Nel controller di dominio, aggiungere nuovi nomi SPN del servizio web per l'account del computer:On the domain controller, add new web service SPNs to the machine account:
    • setspn -S HTTP/mywebservice.mydomain.com mymachine
    • setspn -S HTTP/mywebservice@MYDOMAIN.COM mymachine
  • Uso molte per generare un file keytab:Use ktpass to generate a keytab file:
    • 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
    • Alcuni campi devono essere specificate in lettere maiuscole come indicato.Some fields must be specified in uppercase as indicated.
  • Copiare il file keytab al computer Linux o macOS.Copy the keytab file to the Linux or macOS machine.
  • Selezionare il file keytab tramite una variabile di ambiente: export KRB5_KTNAME=/tmp/mymachine.HTTP.keytabSelect the keytab file via an environment variable: export KRB5_KTNAME=/tmp/mymachine.HTTP.keytab
  • Richiamare klist per mostrare i nomi SPN attualmente disponibili per l'uso.Invoke klist to show the SPNs currently available for use.

Nota

File keytab contiene le credenziali di accesso di dominio e debba essere adeguatamente protette.A keytab file contains domain access credentials and must be protected accordingly.

HTTP.sysHTTP.sys

Http. sys supporta l'autenticazione in modalità Kernel Windows utilizzando Negotiate, NTLM o l'autenticazione di base.HTTP.sys supports Kernel Mode Windows Authentication using Negotiate, NTLM, or Basic authentication.

Aggiungere servizi di autenticazione richiamando AddAuthentication (Microsoft.AspNetCore.Server.HttpSys dello spazio dei nomi) in Startup.ConfigureServices:Add authentication services by invoking AddAuthentication (Microsoft.AspNetCore.Server.HttpSys namespace) in Startup.ConfigureServices:

services.AddAuthentication(HttpSysDefaults.AuthenticationScheme);

Configurare l'host web dell'app per usare HTTP. sys con l'autenticazione di Windows (Program.cs).Configure the app's web host to use HTTP.sys with Windows Authentication (Program.cs). UseHttpSys le novità di Microsoft.AspNetCore.Server.HttpSys dello spazio dei nomi.UseHttpSys is in the Microsoft.AspNetCore.Server.HttpSys namespace.

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

Nota

Per la delega all'autenticazione in modalità kernel, HTTP.sys usa il protocollo di autenticazione Kerberos.HTTP.sys delegates to kernel mode authentication with the Kerberos authentication protocol. L'autenticazione in modalità utente non è supportata con Kerberos e HTTP.sys.User mode authentication isn't supported with Kerberos and HTTP.sys. È necessario usare l'account del computer per decrittografare il token/ticket Kerberos ottenuto da Active Directory e inoltrato dal client al server per autenticare l'utente.The machine account must be used to decrypt the Kerberos token/ticket that's obtained from Active Directory and forwarded by the client to the server to authenticate the user. Registrare il nome dell'entità servizio per l'host, non l'utente dell'app.Register the Service Principal Name (SPN) for the host, not the user of the app.

Nota

Http. sys non è supportata in Nano Server versione 1709 o successiva.HTTP.sys isn't supported on Nano Server version 1709 or later. Per usare l'autenticazione di Windows e HTTP. sys con Nano Server, usare una contenitore di Server Core (microsoft/windowsservercore).To use Windows Authentication and HTTP.sys with Nano Server, use a Server Core (microsoft/windowsservercore) container. Per altre informazioni su Server Core, vedere qual è l'opzione di installazione Server Core in Windows Server?.For more information on Server Core, see What is the Server Core installation option in Windows Server?.

Autorizzare gli utentiAuthorize users

Lo stato di configurazione dell'accesso anonimo determina il modo in cui il [Authorize] e [AllowAnonymous] attributi vengono usati nell'app.The configuration state of anonymous access determines the way in which the [Authorize] and [AllowAnonymous] attributes are used in the app. Le due sezioni seguenti illustrano come gestire gli Stati non consentiti e consentito la configurazione dell'accesso anonimo.The following two sections explain how to handle the disallowed and allowed configuration states of anonymous access.

Non consentire l'accesso anonimoDisallow anonymous access

Quando è abilitata l'autenticazione di Windows e accesso anonimo è disabilitato, il [Authorize] e [AllowAnonymous] attributi non hanno alcun effetto.When Windows Authentication is enabled and anonymous access is disabled, the [Authorize] and [AllowAnonymous] attributes have no effect. Se un sito IIS è configurato per non consentire l'accesso anonimo, la richiesta raggiunga mai l'app.If an IIS site is configured to disallow anonymous access, the request never reaches the app. Per questo motivo, il [AllowAnonymous] attributo non è applicabile.For this reason, the [AllowAnonymous] attribute isn't applicable.

Consenti accesso anonimoAllow anonymous access

Quando sono abilitati sia l'autenticazione di Windows e l'accesso anonimo, usare il [Authorize] e [AllowAnonymous] attributi.When both Windows Authentication and anonymous access are enabled, use the [Authorize] and [AllowAnonymous] attributes. Il [Authorize] attributo consente di proteggere gli endpoint dell'app che richiedono l'autenticazione.The [Authorize] attribute allows you to secure endpoints of the app which require authentication. Il [AllowAnonymous] esegue l'override dell'attributo di [Authorize] attributo nelle App che consente l'accesso anonimo.The [AllowAnonymous] attribute overrides the [Authorize] attribute in apps that allow anonymous access. Per informazioni dettagliate sull'utilizzo di attributi, vedere Autorizzazione semplice in ASP.NET Core.For attribute usage details, see Autorizzazione semplice in ASP.NET Core.

Nota

Per impostazione predefinita, gli utenti che non dispongono di autorizzazione per accedere a una pagina vengono visualizzati una risposta HTTP 403 vuota.By default, users who lack authorization to access a page are presented with an empty HTTP 403 response. Il StatusCodePages Middleware può essere configurato per fornire agli utenti una migliore esperienza di "Accesso negato".The StatusCodePages Middleware can be configured to provide users with a better "Access Denied" experience.

RappresentazioneImpersonation

ASP.NET Core non implementa la rappresentazione.ASP.NET Core doesn't implement impersonation. Le app vengono eseguite con l'identità dell'app per tutte le richieste, usando l'identità del pool o un processo dell'app.Apps run with the app's identity for all requests, using app pool or process identity. Se l'app deve eseguire un'azione per conto di un utente, usare WindowsIdentity.RunImpersonated in un middleware inline terminal in Startup.Configure.If the app should perform an action on behalf of a user, use WindowsIdentity.RunImpersonated in a terminal inline middleware in Startup.Configure. Eseguire una singola azione in questo contesto e quindi chiudere il contesto.Run a single action in this context and then close the context.

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

RunImpersonated non supporta operazioni asincrone e non deve essere usata per scenari complessi.RunImpersonated doesn't support asynchronous operations and shouldn't be used for complex scenarios. Ad esempio, di wrapping delle richieste intere o catene di middleware, non è supportato o consigliato.For example, wrapping entire requests or middleware chains isn't supported or recommended.

Mentre il Microsoft.AspNetCore.Authentication.Negotiate pacchetto consente l'autenticazione in Windows, Linux e macOS, la rappresentazione è supportata solo in Windows.While the Microsoft.AspNetCore.Authentication.Negotiate package enables authentication on Windows, Linux, and macOS, impersonation is only supported on Windows.

Trasformazioni di attestazioniClaims transformations

Durante l'hosting con IIS, AuthenticateAsync non viene chiamato internamente per inizializzare un utente.When hosting with IIS, AuthenticateAsync isn't called internally to initialize a user. Pertanto, un'implementazione di IClaimsTransformation usate per trasformare le attestazioni dopo ogni autenticazione non viene attivata per impostazione predefinita.Therefore, an IClaimsTransformation implementation used to transform claims after every authentication isn't activated by default. Per altre informazioni e un esempio di codice che attiva le trasformazioni di attestazioni, vedere Modulo ASP.NET Core.For more information and a code example that activates claims transformations, see Modulo ASP.NET Core.

Quando si ospitano con la modalità in-process IIS, AuthenticateAsync non viene chiamato internamente per inizializzare un utente.When hosting with IIS in-process mode, AuthenticateAsync isn't called internally to initialize a user. Pertanto, un'implementazione di IClaimsTransformation usate per trasformare le attestazioni dopo ogni autenticazione non viene attivata per impostazione predefinita.Therefore, an IClaimsTransformation implementation used to transform claims after every authentication isn't activated by default. Per altre informazioni e un esempio di codice che attiva le trasformazioni di attestazioni per l'hosting in-process, vedere Modulo ASP.NET Core.For more information and a code example that activates claims transformations when hosting in-process, see Modulo ASP.NET Core.

Risorse aggiuntiveAdditional resources