iis-7 - configurar - windows server 2012 iis windows authentication not working
La autenticación de Windows falla en IIS 7.5 (5)
Estoy creando una aplicación interna simple para mi empresa, y requiere la autenticación de Windows para la seguridad. Todos los demás modos de autenticación están deshabilitados. Estoy atascado en una situación en la que Internet Explorer solicita credenciales 3 veces y luego falla con este error:
No autorizado
Error HTTP 401. El recurso solicitado requiere autenticación de usuario.
Entonces creé un sitio web básico para probar esto. Creé un nuevo sitio en IIS, lo puse en su propio puerto (: 8111, elegido al azar), puse un archivo estático "default.htm" allí, deshabilité la autenticación anónima y luego habilité la autenticación de Windows. Todo lo demás se dejó en la configuración predeterminada. El número de puerto se asignó porque tenemos varios sitios en esta máquina que comparten la misma IP.
Aquí hay algunos escenarios:
Navegando desde el propio servidor web, a http: // localhost : 8111 / funciona bien
Navegando desde otra computadora a http: // ServerIPaddress : 8111 / funciona bien
Navegando desde otra computadora, a http: // ServerName : 8111 / FAILS (solicita credenciales 3 veces, luego da un error 401)
He estado buscando en línea y tratando de encontrar una solución sin suerte hasta ahora. O no lo he encontrado, o no entiendo bien lo que estoy leyendo. Cualquier ayuda sería muy apreciada.
Si todavía no funciona después de mover NTML a la parte superior de la lista de proveedores, intente eliminar Negociar por completo para que solo quede NTML.
Eso lo solucionó para mí: mover NTML al principio no ayudó en Windows Server 2012 e IIS 8.5. Encontré la solución en el siguiente problema de : la autenticación de Windows IIS 7.5 no funciona en Chrome
Error 401.1 cuando navega por un sitio web que utiliza autenticación integrada.
Solución
Desactivar la comprobación de bucle invertido.
* In Registry Editor, locate and then click the following registry key:
HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Control / Lsa
* Right-click Lsa, point to New, and then click DWORD Value.
* Type DisableLoopbackCheck, and then press ENTER.
* Right-click DisableLoopbackCheck, and then click Modify.
* In the Value data box, type 1, and then click OK.
Ha pasado un tiempo desde que se hizo esta pregunta, pero sé que muchas personas lo encuentran mucho. Una solución más adecuada para esto se describe aquí: Autenticación en modo kernel . Implementamos esto hace varios meses, y funciona bien.
Otra buena explicación aquí: MÁS 2008 Y KERBEROS: AUTENTICACIÓN DENEGADA, LA CUENTA DE APP PISCINA ESTÁ INGNORADA
Para aplicar a un solo sitio:
cd %windir%/system32/inetsrv
set SiteName=TheSiteName
appcmd.exe set config "%SiteName%" -section:system.webServer/security/authentication/windowsAuthentication /useKernelMode:"True" /useAppPoolCredentials:"True" /commit:apphost
O para aplicar a todos los sitios:
%windir%/system32/inetsrv/appcmd.exe set config -section:windowsAuthentication /useAppPoolCredentials:"True" /commit:apphost
Personalmente recomiendo NO deshabilitar el loopbackcheck globalmente en su servidor (IE: NO establezca DisableLoopbackCheck
en un valor de 1
en su registro). Esta es una vulnerabilidad de seguridad. Por favor, solo deshabilita para hosts conocidos
Aquí hay una función Powershell para que apuntes en la dirección correcta.
function Add-LoopbackFix
{
param(
[parameter(Mandatory=$true,position=0)] [string] $siteHostName
)
$ErrorActionPreference = "Stop"
Write-Host "Adding loopback fix for $siteHostName" -NoNewLine
$str = Get-ItemProperty -Name "BackConnectionHostNames" -path ''HKLM:/SYSTEM/CurrentControlSet/Control/Lsa/MSV1_0'' -erroraction silentlycontinue
if ($str) {
if($($str.BackConnectionHostNames) -like "*$siteHostName*")
{
Write-Host "`tAlready in place" -f Cyan
} else{
$str.BackConnectionHostNames += "`n$siteHostName"
Set-ItemProperty "HKLM:/SYSTEM/CurrentControlSet/Control/Lsa/MSV1_0" -Name "BackConnectionHostNames" -Value $str.BackConnectionHostNames
Write-Host "`tDone" -f Green
}
} else {
New-ItemProperty "HKLM:/SYSTEM/CurrentControlSet/Control/Lsa/MSV1_0" -Name "BackConnectionHostNames" -Value $siteHostName -PropertyType "MultiString"
Write-Host "`tDone" -f Green
}
Write-Host "`tnote: we are not disabling the loopback check all together, we are simply adding $siteHostName to an allowed list." -f DarkGray
}
> Add-LoopbackFix "ServerName"
Simplemente resolví la solución con la ayuda de un compañero de trabajo después de 2 días de lucha con este problema. Aquí está lo que escribió:
Hay 2 proveedores para la autenticación de Windows (negociar y NTLM). Al configurar la autenticación del sitio web en la autenticación de Windows, mientras la autenticación de Windows está resaltada, haga clic en el enlace Proveedores en el panel derecho o el Administrador de IIS y mueva NTLM a la parte superior. Por defecto, Negociar está en la parte superior, por lo que recibe un mensaje de autenticación.