web-dev-qa-db-fra.com

L'authentification Windows Asp.Net Core ne fonctionne pas dans IIS

Asp.Net Core ne semble pas reconnaître l'utilisateur de l'appel context?.User?.Identity?.Name Lorsque l'authentification Windows est activée et s'exécute dans IIS Express ou IIS.

Comportement souhaité: L'activation de l'authentification Windows et de l'authentification anonyme dans IIS et/ou IIS Express, Asp.Net Core devrait reconnaître automatiquement l'utilisateur Windows).

Comportement réel: lorsque j'active à la fois Windows et l'authentification anonyme dans IIS ou IIS Express, le nom d'utilisateur est nul. Lorsque je désactive l'authentification anonyme ou que j'appelle HttpContext.ChallengeAsync(IISDefaults.AuthenticationScheme), je reçois une invite de connexion, dont je ne veux pas.

Ma compréhension est que, même si je veux l'utiliser pour Active Directory, je n'ai pas besoin d'Active Directory ou d'un domaine pour authentifier un utilisateur Windows.

Environnement:

  • Windows 8.1 (pas sur un domaine)
  • IIS 8.5/Visual Studio 2017 w/IIS Express
  • Fonction de sécurité de l'authentification Windows installée
  • Authentification Windows et (avec le fournisseur NTLM) et authentification anonyme activée
  • Connecté en tant qu'utilisateur de compte local

Dépendances:

  • Microsoft.AspNetCore.All 2.0.8

Commencez:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<IISOptions>(iis =>
    {
        iis.AuthenticationDisplayName = "Windows";
        iis.AutomaticAuthentication = true;
    });

    services.AddAuthentication(IISDefaults.AuthenticationScheme);
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseAuthentication();
    app.Run(async (context) =>
    {
        await context.Response.WriteAsync(JsonConvert.SerializeObject(new
        {                
            UserName = context?.User?.Identity?.Name
        }));
    });       

launchSettings.json:

{
  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:51682/",
      "sslPort": 0      
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="aspNetCore" />
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore forwardWindowsAuthToken="true" processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

applicationhost.config: (IIS Express)

Basé sur cet article: https://docs.Microsoft.com/en-us/iis/configuration/system.webServer/security/authentication/windowsAuthentication/

<authentication>
  <anonymousAuthentication enabled="true" userName="" />
  <basicAuthentication enabled="false" />
  <clientCertificateMappingAuthentication enabled="false" />
  <digestAuthentication enabled="false" />
  <iisClientCertificateMappingAuthentication enabled="false"></iisClientCertificateMappingAuthentication>
  <windowsAuthentication enabled="true">
    <providers>
      <add value="NTLM" />
    </providers>
  </windowsAuthentication>
</authentication>
8
szahn

Quelques choses:

  1. Lorsque vous désactivez l'authentification anonyme, vous obtenez une fenêtre contextuelle car le navigateur ne fait probablement pas confiance au site. Vous devez ouvrir les Options Internet (à partir du Panneau de configuration de Windows) -> onglet Sécurité -> Cliquez sur "Sites de confiance" -> Cliquez sur "Sites" et ajoutez l'URL à votre site. Les deux IE et Chrome utilisent ces paramètres pour décider d'envoyer automatiquement vos informations d'identification).

  2. Lorsque vous avez à la fois anonyme et l'authentification Windows activé, anonyme est prioritaire, sauf à l'endroit où vous lui dites que l'utilisateur doit être connecté. Pour ce faire, Utilisez le [Authorize] attribut soit sur un contrôleur, soit uniquement sur des actions individuelles.

Plus de détails ici, sous la rubrique "Autoriser l'accès anonyme": https://docs.Microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-2.0&tabs=aspnetcore2x# autoriser l'accès anonyme

3
Gabriel Luci