Às vezes você tem que dar um passo para trás ... A causa disso foi que eu tive um Html.RenderAction()
na minha opinião que chamou um método de ação que foi marcado com o atributo [Authorize]
.
Eu tenho um aplicativo da Web implantado na caixa IIS 2008 IIS 7.5.
Do remoto, esse erro é exibido: 401 - Unauthorized: Access is denied due to invalid credentials
. (remote = desktops na mesma LAN)
Já experimentei vários clientes remotos usando diferentes navegadores, o mesmo resultado. (IE, FF e Chrome)
Acertar o aplicativo da área de trabalho do próprio servidor funciona perfeitamente . No entanto, não tentei o Firebug na área de trabalho do servidor. Eu diria que ainda está emitindo um código de status 401 e ainda retorna o conteúdo de qualquer maneira. Veja a Atualização 2.
O aplicativo está usando autenticação anônima.
O aplicativo está escrito em .NET 4.0 Asp.Net usando o framework MVC.
O conteúdo estático funciona bem, por exemplo: link
Sysinternals procmon
retorna esses 2 resultados para cada solicitação: FAST IO DISLEOWED e PATH NOT FOUND.
Eu tenho 2 outros aplicativos MVC rodando bem no mesmo servidor. Eu verifiquei a segurança nas pastas e todas elas correspondem.
O aplicativo é executado corretamente 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?
UPDATE # 1 : Isso só faz mais WTF quando eu cavar.
Se eu clicar no aplicativo no Gerenciador do IIS - > Páginas de erro - > Editar configurações de recursos selecione Detailed Errors
, o aplicativo funciona remotamente. Não deixando isso, então o problema não está resolvido ainda, é apenas mais confuso.
UPDATE # 2 : usando o Firebug, vejo que o status ainda é 401 Unauthorized
, mas a resposta está retornando o HTML correto do aplicativo.
UPDATE # 3 Brincando com o Rastreamento de Solicitações com Falha, aqui está o Rastreamento de Solicitação de ADVERTÊNCIA 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)
Atualização # 4 O log regular do IIS mostra 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
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 para o site e veja se ele quebra localmente.
O que quer que esteja quebrando provavelmente está sendo executado como a identidade do seu website, em vez da identidade do seu pool de aplicativos, caso contrário, ele seria interrompido local e remotamente. Minha recomendação, se você tiver de 1 a 1 mapeamentos de sites para pools de aplicativos ou se 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 explorador de processos. Isso é bom para encontrar informações de execução, mas a ferramenta que provavelmente descobrirá erros de acesso negado é processmon (também do sysinternals). Experimente, reproduza e capture, depois pesquise a palavra "negada". Ele deve ativar todos os problemas de acesso negado no disco.
Você terá esse mesmo comportamento quando tiver um filtro para autorização personalizada que herde de AuthorizeAttribute
e uma ou mais chamadas para o método OnAuthorization
, com uma delas definindo AuthorizationContext.Result
como 'HttpUnauthorizedResult'
Por algum motivo, isso resolveu meu problema.
Você verificou as configurações em Regras de autorização? Se alguém puder acessar essa página (que parece ser seu objetivo), verifique se você tem uma regra de "Permitir" que tem "Todos os usuários" na coluna "Usuários".
Em seguida, em "Autenticação", certifique-se de que não haja conflitos e apenas a autenticação anônima esteja ativada.
Espero que ajude.