Como configurar dois sites no mesmo servidor IIS 7.5 para um único aplicativo da Web do ASP.NET com diferentes modos de autenticação

1

Eu tenho um servidor W2K8 com IIS 7.5 hospedando dois sites que são apontados para um único aplicativo da Web asp.net.

O aplicativo da web foi configurado para autenticação de formulários e autenticação integrada (windows). O loginUrl é configurado para uma página de login configurada para autenticação integrada; se o usuário não puder ser identificado usando Request.ServerVariables ["LOGON_USER"], o aplicativo redirecionará o usuário para uma página de login configurada para autenticação de formulários.

O problema é que, quando eu acessei o site como um usuário anônimo, o IIS está emitindo um Desafio 401 para que a lógica para redirecionar o usuário para a página de login de formulários nunca seja executada. Fui aconselhado a configurar dois sites e fazer com que eles apontassem para o mesmo aplicativo da web; problema aqui é que a propriedade loginUrl no web.config é sobrescrita por alterações em qualquer site. Como faço para configurar os dois sites para usar diferentes modos de autenticação?

    
por Rich 06.12.2011 / 17:03

2 respostas

2

O ASP.NET não suporta ter vários módulos de autenticação integrados de uma só vez. Isso é importante na documentação , <authentication mode="[Windows|Forms|Passport|None]" ...>

Soluções:

  • Crie um IHttpModule personalizado que lide com a autenticação.
  • Separe seu aplicativo em dois aplicativos da Web no IIS, que apontam para dois diretórios diferentes com arquivos de configuração diferentes. Esta é a solução mais fácil.
  • Separe seu aplicativo em dois aplicativos Web no IIS, mas aponte-os para o mesmo diretório. Você precisará remover as configurações de autenticação e representação do web.config que reside no diretório e movê-las para o arquivo web.config (% SystemRoot% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web). .config ou similar). Essas configurações devem ser agrupadas por tags de localização usando o nome do site do IIS.

Exemplo:

<location path="My Awesome Site - Forms">
    <system.web>
        <authentication mode="Forms" />
    </system.web>
</location>

<location path="My Awesome Site - Windows">
    <system.web>
        <authentication mode="Windows" />
        <identity impersonate="true"/>
    </system.web>
</location>
    
por 06.12.2011 / 17:33
0

Eu percebo que esta é uma pergunta antiga, mas eu estava tentando fazer isso e não conseguia; a resposta proposta por Simon não estava funcionando para mim. A maneira como consegui que funcionasse era lidar com isso através de código. No meu caso, queria que um site permitisse a autenticação Anônima e o outro, a autenticação NTLM (Windows). Esses sites estavam sendo hospedados por um CMS e, portanto, não é tão simples quanto definir regras de autorização em relação a caminhos.

O que acabei fazendo foi verificar o valor Request.ServerVariables["LOGON_USER"] , bem como Request.Url.Host , e depois forçar um código de resposta de 401 para apresentar o desafio de autenticação ao navegador do visitante. Eu tenho os modos de autenticação Anonymous e Windows habilitados no arquivo Web.config que é compartilhado entre os sites.

Exemplo de WebForms:

// we only care about authorization for one of the sites
if (Request.Url.Host == "use-ntlm.example.com"
    && string.IsNullOrEmpty(Request.ServerVariables["LOGON_USER"]))
{
    Response.StatusCode = 401;
    Response.End();
    return;
}
    
por 26.01.2017 / 17:59