Аутентификация ядра Windows Asp.Net не работает в IIS - PullRequest
0 голосов
/ 17 мая 2018

Asp.Net Core, похоже, не распознает пользователя по вызову context?.User?.Identity?.Name, когда проверка подлинности Windows включена и работает в IIS Express или IIS.

Желаемое поведение: Включая аутентификацию Windows и анонимную аутентификацию в IIS и / или IIS Express, Asp.Net Core должен автоматически распознавать пользователя Windows.

Фактическое поведение: Когда я включаю оба окна ианонимная аутентификация в IIS или IIS Express, имя пользователя пустое.Когда я отключаю анонимную аутентификацию или вызываю HttpContext.ChallengeAsync(IISDefaults.AuthenticationScheme), я получаю приглашение на вход в систему, которое мне не нужно.

Насколько я понимаю, даже если я хочу использовать это для Active Directory, я неДля аутентификации пользователя Windows нужен активный каталог или домен.

Среда:

  • Windows 8.1 (не в домене)
  • IIS 8.5 / Visual Studio 2017 w/ IIS Express
  • Установлена ​​функция безопасности проверки подлинности Windows
  • Проверка подлинности Windows & (с провайдером NTLM) и включена анонимная проверка подлинности
  • Вход в систему как локальный пользователь учетной записи

Зависимости:

  • Microsoft.AspNetCore.All 2.0.8

Запуск:

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)

На основе этой статьи: 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>

1 Ответ

0 голосов
/ 18 мая 2018

Пара вещей:

  1. Когда вы отключаете анонимную аутентификацию, вы получаете всплывающее окно, потому что браузер, вероятно, не доверяет сайту.Вам нужно открыть «Свойства обозревателя» (из панели управления Windows) -> вкладка «Безопасность» -> нажать «Надежные сайты» -> нажать «Сайты» и добавить туда URL своего сайта.И IE, и Chrome используют эти параметры для принятия решения о том, следует ли автоматически отправлять ваши учетные данные.

  2. Если у вас включена и анонимная проверка подлинности и проверка подлинности Windows, анонимный доступ имеет приоритет, кроме как на месте.где вы говорите, что пользователь должен войти в систему. Для этого используйте атрибут [Authorize] либо на контроллере, либо только на отдельных действиях.

Подробнее здесь, в разделезаголовок «Разрешить анонимный доступ»: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-2.0&tabs=aspnetcore2x#allow-anonymous-access

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...