401 - Não autorizado no Server 2008 R2 IIS 7.5

20

Eu tenho um aplicativo da Web implantado na caixa Server 2008 IIS 7.5.

De remoto dá este erro: 401 - Unauthorized: Access is denied due to invalid credentials. (remoto = desktops na mesma LAN)

Tentei vários clientes remotos usando navegadores diferentes, todos com o mesmo resultado. (IE, FF e Chrome)

Atingir o aplicativo na área de trabalho do próprio servidor funciona perfeitamente . No entanto, eu não tentei o Firebug na área de trabalho do servidor. Eu diria que ele ainda está emitindo um código de status 401 e ainda assim retornando o conteúdo. Consulte a atualização nº 2.

O aplicativo está usando autenticação anônima.

O aplicativo é escrito no .NET 4.0 Asp.Net usando a estrutura MVC.

O conteúdo estático funciona bem, por exemplo: http://server.com/content/image.jpg

A Sysinternals procmonretorna esses 2 resultados para cada solicitação: IO RÁPIDO DESATIVADO e CAMINHO NÃO ENCONTRADO.

Eu tenho 2 outros aplicativos MVC executando bem no mesmo servidor. Eu verifiquei a segurança nas pastas e todas elas coincidem.

O aplicativo funciona bem em uma caixa do Server 2008 IIS 7.0.

Nada aparece no log de eventos no servidor relacionado a isso.

Puxando meu cabelo aqui, alguma dica de solução de problemas?

ATUALIZAÇÃO # 1 : Isso só tem mais WTF enquanto eu cavo.

Se eu clicar no aplicativo no Gerenciador do IIS -> Páginas de erro -> Editar configurações de recursos Detailed Errors, o aplicativo funcionará remotamente. Não deixando isso ligado, o problema ainda não está resolvido, é apenas mais confuso.

ATUALIZAÇÃO # 2 : Usando o Firebug, vejo que o status ainda está 401 Unauthorized, mas a resposta está retornando o HTML correto do aplicativo.

ATUALIZAÇÃO # 3 Brincando com rastreamento de solicitação com falha, eis o rastreamento de solicitação WARNING que está causando o 401:

ModuleName ManagedPipelineHandler
Notification 128
HttpStatus 401 
HttpReason Unauthorized 
HttpSubStatus 0 
ErrorCode 0 
ConfigExceptionInfo  
Notification EXECUTE_REQUEST_HANDLER 
ErrorCode The operation completed successfully. (0x0)

A atualização nº 4 do log regular do IIS está mostrando isso:

#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2010-07-20 19:17:22
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2010-07-20 19:17:22 10.10.1.10 GET /Purchasing/Home - 80 - 10.10.1.12 Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US;+rv:1.9.2.6)+Gecko/20100625+Firefox/3.6.6 401 0 0 4414
mxmissile
fonte
Você tentou executar o Rastreamento de solicitação com falha no servidor e acessar o aplicativo na máquina remota. Se houver uma falha, você deverá ver a causa.
Vivek Kumbhar
@vivek ver a minha última atualização
mxmissile
ARRG !!! Tem mas por isso de novo! Perdi duas horas pesquisando Html.RenderActione percebi o uso do Razor, de Html.Actionmodo que minhas pesquisas iniciais ficaram vazias.
precisa saber é o seguinte
Oh, já faz alguns anos, adivinhem? Apenas desperdiçou 3 horas nesta manhã de novo! Quando vou aprender?!?!?!
Mxmissile

Respostas:

19

Às vezes você tem que dar um passo atrás ... A causa disso foi que, Html.RenderAction()na minha opinião, eu chamei um método de ação que foi marcado com o [Authorize]atributo

mxmissile
fonte
11
Esse era o meu problema, era frustrante o suficiente para dar um soco em um panda (não que eu fosse). Obrigado mxmissile.
Khalid Abuhakmeh
4

Como funciona localmente, mas não remotamente, parece-me que a conta de usuário anônimo não tem acesso a algo, mas o usuário do Windows sim. Para provar isso, desative a autenticação do Windows no site e veja se ele quebra localmente.

O que quer que esteja quebrando provavelmente está sendo executado como a identidade do seu site, em vez da identidade do pool de aplicativos, caso contrário, seria interrompido local e remotamente. Minha recomendação, se você tiver um mapeamento de 1 para 1 de sites para pools de aplicativos ou tiver um ambiente altamente confiável, é definir a conta de usuário anônimo para usar a identidade do pool de aplicativos. Então você não precisa se preocupar com um segundo usuário para manter.

Você mencionou o Process Explorer. Isso é bom para encontrar informações em execução, mas a ferramenta que provavelmente descobrirá erros de acesso negado é processmon (também da sysinternals). Experimente, reproduza e capture novamente e procure a palavra 'negado'. Ele deve ativar todos os problemas de acesso negado no disco.

Scott Forsyth - MVP
fonte
4

Você terá esse mesmo comportamento quando tiver um filtro para autorização personalizada que herda de AuthorizeAttributee uma ou mais chamadas para o OnAuthorizationmétodo, com uma delas configurada AuthorizationContext.Resultcomo `HttpUnauthorizedResult '

Elfdragore
fonte
4

Por alguma razão, isso corrigiu meu problema.

  1. Clique no site no IIS.
  2. Autenticação de clique duplo
  3. Clique com o botão direito e selecione Configurações avançadas
  4. Desmarque "Ativar autenticação no modo Kernel"
CTom
fonte
2

Você verificou as configurações em Regras de autorização? Se alguém puder acessar esta página (que parece ser sua meta), verifique se você possui uma regra "Permitir" que tenha "Todos os usuários" na coluna "Usuários".

Em "Autenticação", verifique se não há conflitos e apenas a autenticação anônima está ativada.

Espero que ajude.

Campo
fonte
11
Allow - Todos os usuários - Herdado
mxmissile