IIS 7.5: Como configurar a página personalizada Erro de autenticação com a Autenticação do Windows. 401 problemas de cabeçalho

14

Eu tenho um site php em execução no IIS 7.5. O site é protegido pela autenticação do Windows e funciona bem:

Quandoosusuáriosacessamosite,elessolicitamnomedeusuário/senhaeconcluemseautenticados.SeosusuáriosclicamemCancelaroudigitamasenha3vezes,elessãomostradosnapáginadeerro401:

Agora, gostaria de mostrar uma página personalizada explicando como fazer login. Então eu vou para as páginas de erro, selecione o código de status 401.2 e aponte para a página que gostaria de exibir:

Depois,verifiqueseoserrospersonalizadosestãoativadosparatodos.Ekaa-boom!Autenticaçãonãofuncionamais,osusuáriosnãosãoapresentadoscomopromptdesenha.Comoadocumentaçãodiz,aAutenticaçãodoWindowsfuncionaenviandoprimeiroaresposta401,depoisonavegadorperguntaascredenciaisdousuárioaoprovedore,emseguida,eledecideoquefazeraseguir.

Oqueaconteceaqui:noprimeiropedidodapágina,oIIStentaenviarocabeçalho401,maspercebequeoweb.configdiz"no redirecionamento 401 para esta página". E, em vez de autenticação, apenas fornece a página de redirecionamento.

Eu tentei substituir 401, 401.1, 401.2 - não fez diferença.

O que estou fazendo errado e como fornecer uma página personalizada sobre erro de autenticação do usuário?

p.s. Aqui está o web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors errorMode="Custom">
            <remove statusCode="500" subStatusCode="-1" />
            <remove statusCode="404" subStatusCode="-1" />
            <remove statusCode="401" subStatusCode="-1" />
            <error statusCode="401" subStatusCode="2" prefixLanguageFilePath="" path="/not_restricted/401.htm" responseMode="ExecuteURL" />
            <error statusCode="404" prefixLanguageFilePath="" path="/not_restricted/404.htm" responseMode="ExecuteURL" />
        </httpErrors>
        <httpProtocol>
            <customHeaders>
                <remove name="X-Powered-By" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
    <system.web>
        <identity impersonate="false" />
        <customErrors defaultRedirect="http://www.myserver.com/not_restricted/500.htm" mode="Off">
        </customErrors>
    </system.web>
</configuration>
    
por trailmax 15.12.2012 / 19:22

4 respostas

14

Tente isto:

mudança:

<error statusCode="401" subStatusCode="2" prefixLanguageFilePath="" path="/not_restricted/401.htm" responseMode="ExecuteURL" />

para

<error statusCode="401" subStatusCode="2" prefixLanguageFilePath="" path="not_restricted1.htm" responseMode="File" />

Com o modo de resposta 'File' o IIS apenas carrega o conteúdo desse arquivo e o exibe, ele ainda envia o status 401 de volta para o cliente.

Eu costumava usar 'ExecuteURL', mas aprendi que o modo File funciona muito melhor. Você só precisa garantir que os recursos vinculados nas suas páginas de erro ainda funcionem.

    
por 15.12.2012 / 19:54
2

Eu encontrei essa mesma questão de usuários que não foram solicitados com credenciais depois de adicionar httperrors personalizados e consegui corrigi-los com um subStatusCode de 0. Espero que isso ajude alguém.

<error statusCode="401" subStatusCode="0" path="..." responseMode="ExecuteURL">
    
por 04.11.2014 / 22:36
1

Então eu estava tendo dificuldades com o mesmo problema do Basic Auth que não solicitava o navegador. Nenhum forçar um erro personalizado de 401.0 (ou seja, definir explicitamente o subcódigo como 0) ou definir a criação da chave do Registro resolveu isso para mim.

Acabou sendo nosso uso de páginas de erro personalizadas para começar. Desligando-os, tudo funcionou bem, de volta em ... especificamente os erros 401 (0) e 401.2 impediram o prompt.

Definir o tipo de erro personalizado como 'File' de 'ExecuteURL' resolveu, mas se o usuário cancelou o prompt ou digitou uma senha incorreta, eles receberam um genérico "Você não tem permissão para visualizar este diretório ou página" .

Após muitas dicas de vários posts, mas nunca um 'como fazer' ou 'por que' exato ... Eu estava usando um caminho relativo para o arquivo de erro personalizado que estava em um subdiretório do site. Alterar o caminho para um caminho absoluto fez com que o erro genérico acima fosse substituído por "não é possível exibir esta página" se a senha for cancelada ou incorreta. Um pouco mais de escavação e encontrei um post falando sobre um atributo de configuração "allowAbsolutePathsWhenDelegated", que é configurado como false por padrão. Também afirma que, se você colocar o arquivo de erro do cliente na raiz do seu site e, em seguida, no local do erro personalizado, apenas o nome do arquivo (ou seja, caminho relativo à raiz do site), ele funcionará ... , Não queria colocar erros personalizados na raiz do meu site. Então usei o ConfigurationEditor para definir o atributo acima como true, definir o caminho absoluto para os arquivos de erros personalizados e tudo começou a funcionar bem. Prompt permaneceu, exibe erro personalizado quando acionado.

O que eu gostaria é de poder usar o atributo File com um caminho relativo aninhado, mas até agora não descobri por que não posso ou como fazer isso. A outra pergunta é, se usando um caminho absoluto, se eu estou potencialmente criando uma falha de segurança (ou seja, por que isso seria desativado por padrão?)

De qualquer forma, espero que isso ajude alguém.

    
por 03.06.2015 / 02:20
0

Por alguma razão estranha no meu caso, a combinação de até 2 soluções funcionou para mim para o asp.net MVC 5.

  <error statusCode="401" subStatusCode="0" prefixLanguageFilePath="" path="not_restricted1.htm" responseMode="File" />
    
por 14.04.2015 / 20:00