URL reescrevendo entre diferentes pools com autenticação diferente no IIS

1

Eu tenho um aplicativo IIS e três sub-aplicativos da seguinte forma:

CMT (Windows and Anonymously authenticated)
- CI
- EM
- Website (Windows authenticated)

O CI e o EM são serviços auxiliares da Web e o site é, obviamente, o site. Agora, se o aplicativo estiver hospedado em cmt.mycompany.com, o usuário poderá acessar o site da seguinte forma:

cmt.mycompany.com/website/mypage

Eu quero escrever uma regra de regravação de URL para que nossos usuários não precisem escrever "website" após o DNS, e podem simplesmente abrir cmt.mycompany.com ou cmt.mycompany.com/mypage para abrir a página principal ou minha página, respectivamente. / p>

<rule name="WebsiteMapping" stopProcessing="true">
  <match url="^(?!\b(?:ci|em|website)\b).*$" />
  <action type="Rewrite" url="http://{HTTP_HOST}/website/{R:0}" logRewrittenUrl="true" />
</rule>

O que essa regra faz é simplesmente reescrever qualquer URL que não comece com ci , em ou website para ter website adicionado após o DNS.

Estou com dois problemas que não consigo resolver:

  1. Por algum motivo, a regravação de URL parece não funcionar com a autenticação, portanto, sempre que eu clicar em cmt.mycompany.com , recebo uma caixa de diálogo para autenticar a mim mesmo e não funciona mesmo se eu inserir minhas credenciais. Como o aplicativo principal (CMT) e o site estão hospedados em pools de aplicativos diferentes, precisávamos instalar o IIS ARR, mas isso não ajudou.

  2. Tentei alterar a regra para "redirecionar" e funcionou, mas há outro problema. Então eu tenho um balanceador de carga conectado a 4 caixas individuais. O balanceador de carga está hospedado na porta 80, mas as caixas individuais são hospedadas na porta 9991. Quando eu clico nas caixas individuais, o redirecionamento de URL funciona com êxito, mas quando eu clico no dns do balanceador de carga, a porta 9991 (da caixa individual) é adicionado ao dns do balanceador de carga !! Por exemplo, se eu atingir cmt.mycompany.com/mypage , serei redirecionado para cmt.mycompany.com:9991/website/mypage , o que é obviamente inválido, pois o balanceador de carga está hospedado na porta número 80, não 9991.

Alguma ideia para ajudar a resolver estes problemas?

Obrigado!

    
por Rafid 08.04.2013 / 18:31

1 resposta

1

Eu posso ver duas possibilidades: o NTLM não é compatível com reescrita de URL + ARR. Para autenticação integrada do Windows, você pode ter que configurar o Kerberos para que ele funcione corretamente.

Aqui está uma página descrevendo as etapas gerais para o SharePoint, mas é aplicável em outro lugar: link

De um mergulho profundo no artigo, você precisa criar nomes principais de serviço para os aplicativos da Web e delegar o controle à identidade do aplicativo da Web. Para criar o SPN, use um comando como este: (HTTP se aplica para HTTP e HTTPS)

setspn -s HTTP/[domain name of application] [domain name]\[server name hosting application]

Defina um SPN para cada domínio que você precisará autenticar para e para cada servidor em que os aplicativos estão hospedados (se você tiver um web farm). Em seguida, abra o diretório ativo e defina a exibição para o modo avançado. Abra o objeto de computador para um dos servidores da web. Vá para a guia de delegação. Altere o botão de opção para "Confiar este usuário apenas para delegação em serviços especificados", certifique-se de que o próximo botão de opção seja "Usar qualquer protocolo de autenticação". Clique em Adicionar. procure pelas identidades do pool de aplicativos (se for o Network Service, você não precisa se preocupar com essa parte). Clique OK. Em adicionar serviços, selecione todos os que essa identidade do pool de aplicativos é responsável e clique em OK.

Como alternativa, pode ser mais fácil criar apenas uma página padrão na raiz que redirecionará o tráfego para o local adequado, algo assim:

Response.Redirect("http://" + Request.Url.ServerName + "/WebSite" + Request.Url.PathAndQuery);

Configure os erros personalizados no site padrão para usar essa página. Eu vou fazer alguns testes, mas você pode ter que fazer outra página para erros que usa PathAndQuery do URI de referência para enviá-lo para o lugar certo.

    
por 10.04.2013 / 16:29