Autenticação no modo kernel: erros 401 ao acessar o site a partir de máquinas remotas

3

Eu tenho vários sites ASP clássicos que usam a autenticação integrada do Windows e a delegação Kerberos.

Eles funcionam bem nos servidores ativos (movidos recentemente para servidores Server 2008 / IIS7), mas não funcionam totalmente no meu PC de desenvolvimento ou no meu servidor de desenvolvimento. O IIS em ambas as máquinas foi configurado por meio de um pacote de ferramentas de implantação da Web do IIS que foi exportado de uma máquina antiga; a implantação não funcionou perfeitamente e eu tive que mexer um pouco para fazer os sites funcionarem.

Ao acessar os aplicativos localmente em qualquer máquina, eles funcionam bem; Ao acessar a partir de outra máquina, o usuário é solicitado por uma caixa de diálogo de nome de usuário / senha e, independentemente do que você digita, resulta em um erro 401 (Não autorizado) .

Eu tentei comparar a configuração dessas máquinas com servidores ao vivo similares (que funcionam bem), e eles parecem geralmente comparáveis (dado que nenhum dos servidores ativos ainda estão no IIS7.5) (Windows 7 / Server 2008 R2 ).

Esses aplicativos são executados em um pool de aplicativos comum que usa um usuário de domínio especial como sua identidade - esse usuário tem permissões semelhantes nas máquinas ao vivo e de desenvolvimento. Em plataformas IIS6, para habilitar a delegação do kerberos, precisei configurar alguns SPNs para esse usuário, e eles ainda estão em vigor (embora eu não acredite que eles sejam mais necessários para o IIS7 + devido à autenticação no modo kernel),

Além disso, essa conta está habilitada para a delegação do Kerberos no Active Directory, assim como cada uma das máquinas que estou lidando.

Estou considerando a possibilidade de que a implantação possa ter feito alterações / tenha falhado em fazer alterações na configuração do IIS, causando esse problema. Talvez uma reconstrução completa (menos outra tentativa de implantação da Web) resolvesse o problema, mas eu preferiria corrigir (assim entender) o problema atual.

Alguma idéia até agora?

Acabei de tentar outra vez corrigir esse problema, e fiz alguns progressos, mas ainda não tenho uma correção completa ...

Descobri que, se eu acessar os sites por meio do endereço IP (do que pelo nome NetBIOS), recebo o mesmo diálogo, exceto que ele aceita minhas credenciais e, portanto, o aplicativo funciona - não é uma correção, mas um passo útil .

Mais interessante, descobri que, se eu desabilitar a autenticação no modo kernel (em Gerenciador do IIS > Website > Autenticação > Configurações avançadas ), os aplicativos funcionarão perfeitamente. Meu entendimento nebuloso é que isso está efetivamente funcionando da maneira anterior ao IIS7. Uma solução razoável a curto prazo, mas considere o seguinte conselho explícito do IIS sobre esta questão:

By default, IIS enables kernel-mode authentication, which may improve authentication performance and prevent authentication problems with application pools configured to use a custom identity. As a best practice, do not disable this setting if Kerberos authentication is used in your environment and the application pool is configured to use a custom identity.

É evidente que não é assim que meus aplicativos devem funcionar. Então, qual é o problema?

    
por CJM 05.01.2011 / 14:07

2 respostas

0

Eu tenho lutado com esse problema há vários anos. Periodicamente, consigo fazê-lo funcionar, mas, um ano depois, há uma mudança no servidor e tenho que lutar novamente para que ele funcione no novo servidor.

Esse tempo chegou novamente ... Depois de lutar para depurar esses problemas do kerberos, voltei ao básico: outras pessoas devem ter feito o que eu tentei com frequência - o que eles usaram?

Embora existam pessoas usando minha técnica, elas claramente não têm os problemas, eu faço. Mas há uma dúzia de maneiras de resolver a maioria dos problemas, então eu combinei técnicas encontradas em 2 ou 3 exemplos na web e jogo com uma abordagem diferente, que parece ser mais confiável e não mais complicada do que a anterior, e crucialmente envolveu o infame kerberos 'double-hop':

Sub Authuser()

'Swap out values enclosed in []

If Session("UID") = "" or 1 then
    Dim rsUser, aUserID, aGroups, i
    Dim connAD, sBase, sFilter, sAttributes, sScope, sFullCommand, rsADUserInfo, oADSysInfo

    aUserID = Split(Request.servervariables("AUTH_USER"),"\")

    Set connAD = Server.CreateObject("ADODB.Connection")
    connAD.Provider = "ADsDSOObject"
    connAD.Properties("User ID") = "[MyDomain]\[MyDomainUser]" ' ### remember to make sure this user has rights to access AD
    connAD.Properties("Password") = "[password]"
    connAD.Properties("Encrypt Password") = true
    connAD.Open

    sBase = "<LDAP://DC=[MyDomain], DC=[MyDomainExt]>"
    sFilter = "(sAMAccountName=" & aUserID(1) & ")"
    sAttributes = "cn, mail, company, givenName, sn, ADsPath, name, sAMAccountName, telephoneNumber, memberof"
    sScope = "subtree"  
    sFullCommand = sBase & ";" & sFilter & ";" & sAttributes & ";" & sScope

    set rsUser = Server.CreateObject("ADODB.Recordset")
    set rsUser = connAD.Execute(sFullCommand)

    If not rsUser.EOF then
        Session("UID") = aUserID(1)
        Session("Name") = rsUser("cn")
        Session("Email") = rsUser("mail")
        If IsArray(rsUser.Fields(9)) Then
            aGroups = rsUser.Fields(9)
            For i = LBound(aGroups) To UBound(aGroups)
                If InStr(1, aGroups(i), "[MyUsersGroup]", 1) Then
                    Session("Auth") = 1
                End If
                If InStr(1, aGroups(i), "[MyAdminGroup]", 1) Then
                    Session("Admin") = 1
                End If
            Next
        Else
            Response.Write "No groups<BR>"
            Session("Auth") = 1
            Session("Admin") = 1
       End If
    Else 
        Response.Write "User not recognised in AD<br>"
    End if

    connAD.Close
    set rsUser = Nothing
    Set connAD = Nothing
End If

End Sub
    
por 03.04.2012 / 17:58
0

Experimente outro navegador, por exemplo, o Chrome, se você estiver usando o IE agora. É possível que isso seja do nome de domínio que está na Intranet ou na zona confiável. Isso pode fazer com que ele tente salvar credenciais que podem não funcionar remotamente, dependendo se você estiver vindo de fora do domínio ou não.

    
por 05.01.2011 / 15:05