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>