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 procmon
retorna 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
fonte
Html.RenderAction
e percebi o uso do Razor, deHtml.Action
modo que minhas pesquisas iniciais ficaram vazias.Respostas:
À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]
atributofonte
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.
fonte
Você terá esse mesmo comportamento quando tiver um filtro para autorização personalizada que herda de
AuthorizeAttribute
e uma ou mais chamadas para oOnAuthorization
método, com uma delas configuradaAuthorizationContext.Result
como `HttpUnauthorizedResult 'fonte
Por alguma razão, isso corrigiu meu problema.
fonte
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.
fonte