É possível configurar a autenticação básica apenas para uma ligação de domínio específica?

2

Eu só quero ativar a autenticação básica apenas para uma ligação de domínio e deixar o restante acessível ao público. Isso é possível com o IIS?

    
por Tuan Anh Tran 02.08.2016 / 05:20

1 resposta

2

As informações de ligação de um site da web são usadas para determinar a quais solicitações de entrada do site são roteadas. (pelo serviço de ativação do Windows e http.sys).

Para cada site, você pode ativar os vários métodos de autenticação para todo o site ou um URL específico em um site, mas não com base no nome do host.

Você tem pelo menos duas opções:

A opção 1 é usar dois sites da Web separados, apontando para o mesmo diretório físico e usando o mesmo web.config na raiz do site.

Você ainda pode ter métodos de autenticação diferentes para os dois sites.

A desvantagem aqui é que você tem dois conjuntos de arquivos de log e certas alterações na configuração também precisam ser feitas duas vezes.

A opção dois envolve o módulo de regravação de URL

Vamos supor que você tenha dois nomes de host vinculados ao site normal.serverfault.com e secure.serverfault.com .

Crie um diretório virtual secure sob a raiz do site, mas aponte-o para o mesmo diretório físico do site em si (igual à raiz).

Para o diretório virtual, desative anonymousAuthentication e ative o basicAuthentication.

Agora, adicione uma regra de reescrita ao site:

<rewrite>
  <rules>
      <rule name="Secure">
          <match url=".*" />
          <conditions>
              <add input="{SERVER_NAME}" pattern="^secure\.serverfault\.com$" />
          </conditions>
          <action type="Rewrite" url="/secure/{R:0}" />
      </rule>
  </rules>
</rewrite>

Estamos reescrevendo todas as solicitações para usar o diretório secure virtual, mas somente se o nome do host for secure.serverfault.com

Agora, os usuários que usam normal.serverfault.com ainda podem acessar o site sem autenticação, mas ao usar secure.serverfault.com , precisam fazer o login.

Um problema que vejo com essa opção é que o web.config na raiz do seu site é basicamente processado duas vezes para as solicitações reescritas.

Mesmo que exista apenas uma vez fisicamente, ao executar uma solicitação em \secure\ , ela é vista como a local para o diretório virtual e mais uma vez para o diretório pai. Então você tem que ter certeza que você não tem configurações que não suportam isso. Por exemplo, <add... nós não podem ser duplicados, você tem que usar <clear... ou <remove... para contornar isso. Ou você move as configurações para o ApplicationHost.config.

Você deve testar seu site com essa configuração, mas como o navegador nunca sabe que o URL foi reescrito, ele deve funcionar bem.

    
por 02.08.2016 / 13:47