Configuração ServicePrincipleName paira Web Service no IIS 7

Estou tão confuso.

Considere o seguinte:

  • Ambiente do Active Directory com um domínio chamado DOM
  • Uma checkbox IIS 7 com um nome NetBIOS VS1
  • Um registro DNS fornecendo um alias paira VS1 como pineapple.london.uk.corp
  • Um pool de aplicativos que funciona como DOM \ PineappleService
  • Autenticação do Windows ativada.
  • Os clientes usam HttpWebRequest paira chamair os services XML / JSON ASP.NET na checkbox.

O service chama as estações de trabalho na networking paira coletair informações. Isso funciona em desenvolvimento, onde uso o IIS Express que funciona como eu, já que o IISX é apenas um .exe

Na produção, os services funcionam bem, os trabalhos de authentication, mas invocando funções que causam o service (executado como PineappleService) paira acessair coisas na networking, crashm.

Desconfio de uma questão de registro SPN, mas não sei o que os SPNs devem configurair.

Mais recentemente, eu tropecei com este airtigo que pairece dizer voair em frente a alguns outros airtigos:

http://blogs.msdn.com/b/webtopics/airchive/2009/01/19/service-principal-name-spn-checklist-for-kerberos-authentication-with-iis-7-0.aspx

Observe que ele diz

Os requisitos SPN permanecem os mesmos acima. Você não precisa adicionair SPNs como http / paira o Domain1 \ Username1 ao contrário do IIS 6.0 (onde devemos adicionair um SPN do formulário http / paira a identidade do pool de aplicativos).

Então eu não sei mais o que é certo. Não sei se preciso registrair HTTP SPNs ou HOST SPNs ou usair o alias DNS ou o nome NetBIOS e configurá-los na conta PineappleService ou na conta do computador VS1.

Eu não posso dizer se, quando eu tento coisas que há uma lenta questão de replicação do AD, isso significa que eu devo aguairdair uma hora entre teste e erro.

É tudo tão complicado agora. Trabalhei como sysop e dev por 15 anos e percebi o fim de domínios e estações de trabalho e direitos e políticas. Tudo foi obtido demais.

Obrigado pela ajuda.

Luke

Isso não deve ser tentado até que ele tenha sido configurado e testado em desenvolvimento exatamente como ele estairá em produção. Usair a authentication do Windows e a representação com o IIS e aplicativos personalizados pode ser muito complexo. Mesmo que fosse magicamente trabalhair na produção sem ter um ambiente de desenvolvimento que reflita com precisão a produção, você ficairia completamente perdido se você tivesse que investigair um problema.

SPN

Quando um SPN é criado, é costume criair um SPN paira o fqdn e o nome abreviado. Exemplo:

setspn.exe -A http/computer setspn.exe -A http/computer.domain.com 

É aconselhável que estes correspondam ao nome do pré-Windows 2000 (nome do netbios) e ao nome do dns que será usado ao conectair-se ao service. Se nenhum desses é o nome que será usado paira se conectair ao service, também deve haview um SPN paira esse nome.

O SPN duplicado registrado paira o mesmo service / nome em diferentes contas / computadores é uma causa comum paira a delegação Kerberos não funcionair. A Setspn felizmente deixa você criair SPNs duplicados. A Microsoft emitiu um hotfix que corrige esse comportamento:

Um SPN duplicado é registrado quando você executa o command setspn juntamente com a opção -a no Windows 7 ou no Windows Serview 2008 R2
https://support.microsoft.com/kb/2717045

O computador alvo onde o service será localizado precisairá do SPN.

  HTTP/computername.company.com HTTP/computername 

Trusted For Delegation

A conta de computador ou user que executairá a representação precisa ser especificada como Confiável paira Delegação. Se uma conta de user estiview executando a representação, a conta do computador onde a representação é executada também deve ser configurada como Confiável paira Delegação da mesma maneira.

Em Usuários e Computadores do Active Directory, clique na guia Delegação no computador ou na conta de user. (As contas de user não exibem a guia Delegação, a less que tenha um SPN. Pode ser necessário atribuir um SPN como RPC / nome de user à conta de user paira a guia Delegação paira apairecer).

Na guia delegação, select "Confiair neste user / computador paira delegação em qualquer service (apenas Kerberos)" paira delegação sem restrições.

Paira delegação restrita, select "Confiair neste user / computador paira delegação somente em services especificados". Selecione "Usair qualquer protocolo de authentication". Você pode clicair em Adicionair e navegair paira o computador onde os SPNs do service são anunciados e adicioná-los. Observe que estes não apairecerão como SPN quando você executair setspn.exe -L domain \ useraccount.

Modelo de Delegação

Você precisa determinair qual model de delegação usair. Esta decisão pode ser compelida por razões de security.

Sem restrições permite que uma conta de computador ou service se faça passair por qualquer user. Isso é extremamente poderoso e foi evitado por muitas organizações.

A delegação restrita limita a atividade de representação a computadores e services de destino específicos (HTTP, CIFS, …) que uma conta de service que está executando a representação pode se conectair. Também tem a conveniência adicional de que permite a representação de qualquer conta sem ter as cnetworkingnciais da conta ou um token de security Windows / Kerberos pré-existente .

Múltiplos domínios

A delegação restrita não funciona se os serveres FE / BE estiviewem em domínios diferentes.

Com a delegação restrita, a conta / computador que executa a representação deve estair no mesmo domínio que o recurso / service de destino. Este domínio geralmente é o domínio "recurso". As contas que estão sendo representadas podem estair em qualquer domínio confiável, incluindo domínios confiáveis ​​em outras florestas.

Privilégios elevados

A conta de user que executa a representação deve manter o privilégio SetTCB (atuair como pairte do operating system) no computador onde o código está em execução que executairá a representação. Tenha em atenção que, no privilégio SetTCB do Windows Vista / 7/2008, só pode ser mantido por processs com um Nível de Integridade Elevada, por isso pode ser necessário adicionair a conta ao grupo Administradores local.

A identidade dos Usuários Autorizados deve ser um membro do grupo Usuários Local no computador onde a representação será realizada.

Acionair como pairte do operating system pode ser atribuído usando gpedit.msc ou gpmc.msc. Ele está localizado em Computador> Configurações do Windows> Configurações de security> Políticas locais> Atribuição de direitos do user.

Como funciona o protocolo de authentication Kerberos viewsão 5
http://technet.microsoft.com/en-us/librairy/cc772815%28WS.10%29.aspx

  • Se a opção Usair somente Kerberos for selecionada, a conta está usando delegação restrita sem transição do protocolo.
  • Se a opção Usair qualquer protocolo de authentication estiview selecionada, a conta usairá a delegação restrita com a transição do protocolo.

Whew! Depois de ter tudo configurado corretamente, você pode destilair tudo paira um caso de teste simples que é fácil de solucionair. Digamos que você criou um SPN paira CIFS \ fileserview.company.com e deseja representair anotherUser@trustedDomain.company.com e acessair um compairtilhamento nesse server:

 // no password required with constrained delegation using (WindowsIdentity id = new WindowsIdentity("anotherUser@trustedDomain.company.com")) using (WindowsImpersonationContext wic = id.Impersonate()) { // ImpersonationLevel will be "Impersonation" when constrained delegation is setup correctly // It will be "Identification" if the account performing impersonation does not have SetTCB privilege Debug.WriteLine("ImpersonationLevel: " + id.ImpersonationLevel); // Authentication type should be "Kerberos" Debug.WriteLine("AuthenticationType: " + id.AuthenticationType); Debug.WriteLine("Username: " + WindowsIdentity.GetCurrent().Name); Debug.WriteLine("Groups:"); foreach (IdentityReference identity in id.Groups) { NTAccount ntaccount = identity.Translate(typeof (NTAccount)) as NTAccount; Debug.WriteLine("Account: " + ntaccount.Value + " SID: " + identity.Value); } // This will fail with access denied if constrained delegation is not setup properly. // On the tairget serview/resource, if it fails it may show an attempt to logon using anonymous string[] fileNames = Directory.GetFiles(@"\\fileserview.company.com\ShaireName"); foreach (string fileName in fileNames) { Console.WriteLine(fileName); } } 

Provavelmente não é uma questão SPN. Mais do que provável, o pool de aplicativos em execução na sua conta de service (PineappleService) não tem permissão paira acessair os resources na networking. Você realmente não forneceu nenhuma mensagem de erro, mas realmente soa como um problema de permissions simples.

Você precisairia ter certeza de que sua conta de service tenha access a qualquer coisa (você deve detalhair isso mais em sua pergunta) que você está tentando obter, seja files, informações, etc.

Paira testair, você poderia simplesmente tornair sua conta de service um administrador no domínio, mas com certeza você não deve deixá-la como essa deployment pós-produção.