Eu já vi essa pergunta algumas vezes na internet, mas nenhuma resposta que já vi resolveu meu problema.
Eu tenho a autenticação de formulários ativada em meu aplicativo e o acesso anônimo foi negado:
<configuration>
...
<system.web>
...
<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="Account/Authenticate.aspx"></forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
O acesso à página de login foi ativado:
</system.web>
<location path="Account/Authenticate.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
A autenticação anônima está habilitada na caixa de diálogo de propriedades do projeto e a autenticação do Windows está desabilitada. Eu também verifiquei o arquivo applicationhost.config para o IIS Express em meus documentos. Possui todos os modos de autenticação, exceto anônimo desabilitado. Estou usando o IIS express como o servidor de depuração.
Até onde eu sei, isso é tudo o que você deve fazer para resolver o erro de acesso negado, mas ainda recebo a seguinte mensagem de erro no meu navegador:
Mensagem de erro 401.2 .: Não autorizado: o logon falhou devido à configuração do servidor. Verifique se você tem permissão para exibir esse diretório ou página com base nas credenciais fornecidas e nos métodos de autenticação habilitados no servidor Web.
Como uma observação interessante, se eu habilitar a autenticação do Windows, a página de login aparecerá corretamente. No entanto, isso não funciona quando o site é implantado. Se implantado, a ativação da autenticação do Windows apenas fará com que uma janela JavaScript apareça em pop-ups pedindo credenciais (não a forma que eu criei).
Alguém sabe como consertar isso? Meu único recurso neste momento é restringir manualmente o acesso ao código e fazer com que o IIS deixe todo o tráfego passar.
Editar
Como solução final, apenas autentiquei manualmente os usuários. Tanto quanto o IIS sabe que o acesso anônimo é irrestrito, mas a sessão é verificada em cada solicitação para verificar se o usuário efetuou login (a sessão é onde eu armazeno meu objeto de conexão de banco de dados por usuário). Para conteúdo estático, apenas uso manipuladores HTTP que usam um estado de sessão somente leitura para verificar o acesso antes de exibir arquivos.
Tags authentication login iis