Como utilizar o SPN quando configurar aplicações da Web hospedados no IIS

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 929650
Sumário
Este artigo descreve os nomes principais de serviço (SPN). Este artigo também descreve como utilizar o SPN quando configurar aplicações Web hospedadas no Microsoft Internet Information Services (IIS). Este artigo também descreve o processo de negociar a autenticação integrada do Windows. Negociar segurança cabeçalho permite que clientes seleccione entre a autenticação Kerberos e a autenticação NTLM.

Além disso, este artigo descreve cenários comuns que requerem um SPN activar a autenticação Kerberos. A última secção descreve situações nas quais poderá falhar a autenticação Kerberos. A última secção também fornece passos de resolução de problemas.
INTRODUÇÃO
Importante Os tópicos abordados neste artigo se aplicam a Internet Information Services (IIS) 6.0. Os tópicos também se aplicam aos IIS 7.0 e 7.5 se a autenticação de modo kernel está desactivada por definição a definição de configuração useKernelMode como false.
Este artigo passo a passo descreve como utilizar nomes principais de serviço (SPN) quando configurar aplicações Web hospedadas em passagens IIS.IIS cabeçalho de negociar segurança quando é utilizada a autenticação integrada do Windows para autenticar pedidos de cliente. Negociar segurança cabeçalho permite que clientes seleccione entre a autenticação Kerberos e a autenticação NTLM. O processo de Negotiate selecciona a autenticação Kerberos, a menos que se verifique uma das seguintes condições verdadeira:
  • Um dos sistemas que esteja envolvido na autenticação não é possível utilizar a autenticação Kerberos.
  • A aplicação de chamada não fornece informações suficientes para utilizar a autenticação Kerberos.
Para permitir que o processo de Negotiate seleccionar o protocolo Kerberos para autenticação de rede, a aplicação cliente deve fornecer um SPN, um nome principal de utilizador (UPN) ou um nome de conta de NetBIOS como o nome de destino. Se a aplicação cliente não fornecer um nome de destino, o processo de negociar não pode utilizar o protocolo Kerberos. Se o processo de negociar não pode utilizar o protocolo Kerberos, o processo de Negotiate selecciona o protocolo NTLM.
Mais Informação

Conceitos

Definição de um SPN

Um SPN é o nome pelo qual um cliente identifica uma instância de um serviço. Se instalar várias instâncias de um serviço nos computadores através de uma floresta, cada instância de serviço deve ter própria SPN. Uma instância do serviço em particular pode ter vários SPN se existirem vários nomes que os clientes podem utilizar para autenticação. Por exemplo, um SPN sempre inclui o nome do computador anfitrião no qual a instância de serviço está a ser executado. Por conseguinte, uma instância do serviço pode registar um SPN para cada nome ou alias do anfitrião.

A classe do serviço HTTP

A classe do serviço HTTP difere do protocolo HTTP. O protocolo HTTP e o protocolo HTTPS utilizam a classe de serviço HTTP. A classe de serviço é a cadeia que identifica a classe geral do serviço. Nomes de classes de serviço bem conhecido incluem "www" para um serviço Web e "ldap" para um serviço de directório. Geralmente, o nome da classe de serviço pode ser qualquer cadeia que é exclusiva para a classe de serviço. Tenha em atenção que a sintaxe SPN utiliza um carácter de barra diagonal (/) para separar elementos. Por conseguinte, o carácter de barra diagonal (/) não pode aparecer num nome de classe de serviço.

Classe de serviço o serviço do HOST e o HTTP

O serviço do HOST representa o computador anfitrião. O protocolo Kerberos utiliza o SPN HOST para aceder ao computador anfitrião. O protocolo Kerberos utiliza a chave a longo prazo no computador anfitrião para criar uma permissão de serviço.

A classe de serviço HTTP é um dos serviços incorporados que funcionam como um alias para o SPN do HOST. O SPN HOST é mapeado para a conta do computador anfitrião. Por conseguinte, quando utiliza a classe predefinida do serviço HTTP, o protocolo Kerberos utiliza a conta de computador com a conta de serviço para pedir uma permissão de serviço.

Cenários comuns

Esta secção descreve cenários que podem requerer um SPN. Além disso, esta secção demonstra como determinar qual SPN definir para cada cenário. Nestes cenários, são utilizados os seguintes termos:
IIS6server1O nome de anfitrião do computador que está a executar o IIS
mydomainO domínio ao qual o computador IIS6server1 está associado
appPool1A conta de utilizador no domínio mydomain que é utilizado para a identidade do agrupamento de aplicações
appPool2A conta de utilizador no domínio mydomain que é utilizado para a segunda identidade do agrupamento de aplicações
www.test.comNo primeiro cabeçalho de anfitrião para um Web site
www.TEST2.comO segundo cabeçalho de anfitrião para um Web site
www.test3.comO terceiro cabeçalho de anfitrião para um Web site
www.myIIScluster.comO nome de domínio totalmente qualificado de um cluster de computadores que executem o IIS
www.myEXCHcluster.comO nome de domínio totalmente qualificado de um cluster de computadores que executem o Microsoft Exchange no IIS

A ferramenta Setspn.exe

A ferramenta Setspn.exe permite-lhe ler, modificar e eliminar a propriedade de directório SPN para uma conta de serviço do Active Directory. SPN é utilizado para localizar um nome principal do destino para executar um serviço. A ferramenta SetSpn.exe também permite-lhe ver o SPN actual, repor predefinida SPN a conta e adicionar ou eliminar SPN suplementar.

Para obter a ferramenta Setspn.exe para o Microsoft Windows Server 2003, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
970536Setspn.exe suporte ferramenta de actualização para o Windows Server 2003

Cenário 1: Aceder a uma aplicação do IIS quando tiver sido modificada a identidade do agrupamento de aplicações

Quando uma aplicação do IIS é executado sob uma conta de utilizador de domínio em vez de sob a conta de serviço de rede predefinida, tem de definir o SPN do serviço HTTP na conta de domínio. Neste cenário, pode aceder a aplicação IIS utilizando o nome de NetBIOS do servidor que está a executar o IIS ou o nome de domínio completamente QUALIFICADO do servidor que está a executar o IIS.

Para aceder à aplicação do IIS utilizando o nome de NetBIOS, utilize o comando seguinte, onde NETBIOS_NAME_OF_IIS_SERVER é o nome de NetBIOS do servidor que está a executar o IIS:
Setspn –S HTTP / NETBIOS_NAME_OF_IIS_SERVER domain\username
Por exemplo, o comando poderá ser semelhante o seguinte comando:
Setspn –S HTTP/iis6server1 mydomain\appPool1
Para aceder à aplicação do IIS utilizando o FQDN, utilize o comando seguinte, onde FQDN_OF_IIS_SERVER é o FQDN do servidor que está a executar o IIS:
Setspn –S HTTP / FQDN_OF_IIS_SERVER domain\username
Por exemplo, o comando poderá ser semelhante o seguinte comando:
Setspn –S HTTP/iis6server1.mydomain.com mydomain\appPool1

Cenário 2: Aceder a uma aplicação Web utilizando um cabeçalho de anfitrião

Quando acede a uma aplicação Web utilizando um cabeçalho de anfitrião, terá de definir um SPN do serviço HTTP.

Quando executa a aplicação Web sob uma conta predefinida como a conta do serviço de rede, a conta serviço local ou a conta de sistema local, pode utilizar o seguinte comando:
Setspn –A HTTP / HOST_HEADER NETBIOS_NAME_OF_IIS_SERVER
Neste comando, HOST_HEADER é o cabeçalho de anfitrião que escreve uma janela do browser para aceder à aplicação e NETBIOS_NAME_OF_IIS_SERVER é o nome de NetBIOS do servidor que está a executar o IIS.

Por exemplo, o comando para a aplicação poderá ser semelhante o seguinte comando:
Setspn –A HTTP/www.test.com iis6server1
Se executar a aplicação numa conta de domínio, pode utilizar o seguinte comando:
Setspn –A HTTP / HOSTHEADER_OR_DNS_ALIAS domain\username
Neste comando, HOSTHEADER_OR_DNS_ALIAS é o cabeçalho de anfitrião ou o alias de DNS utiliza para aceder à aplicação Web.

Por exemplo, o comando para a aplicação poderá ser semelhante um dos seguintes comandos:
  • Setspn –A HTTP/www.test.com mydomain\appPool1
  • Setspn –A HTTP/www.test3.com mydomain\appPool2

Cenário 3: Aceder a uma aplicação do IIS num ambiente em cluster ou com balanceamento de carga

Quando executa o IIS num ambiente de cluster ou num ambiente com balanceamento de carga, pode aceder a aplicações utilizando o nome do cluster em vez de utilizando um nome de nó. Este cenário inclui balanceamento de carga em rede. Na tecnologia de cluster, um nó refere-se a um computador que seja membro do cluster. Para utilizar Kerberos como o protocolo de autenticação neste cenário, a identidade do agrupamento de aplicações em cada nó IIS tem de ser configurada para utilizar a mesma conta de utilizador de domínio. Para configurar cada nó IIS para utilizar a mesma conta de utilizador de domínio, utilize o seguinte comando:
Setspn –A HTTP / CLUSTER_NAME domínio\utilizador
Por exemplo, o comando poderá ser semelhante um dos seguintes comandos:
  • Setspn –A HTTP/www.myIISCluster.com mydomain\appPool1
  • Setspn –A HTTP/www.myEXCHCluster.com mydomain\appPool2

Cenário 4: Utilizar SQL Server para aceder a uma aplicação

O SPN no servidor back-end poderá ter de verificar se a aplicação Web do IIS requer acesso a um computador de back-end que esteja a executar o SQL Server. A aplicação da Web poderão não funcionar correctamente se o SPN necessário está configurado incorrectamente.

Se o computador de back-end que esteja a executar o SQL Server estiver a executar sob a conta sistema local, o MSSQLSvc / FQDN_OF_SQL_SERVER:port número da porta tem de estar disponível para o nome do computador. Utilize o seguinte comando para determinar o SPN do computador que está a executar o SQL Server:
Setspn –L SQL_SERVER_COMPUTER_NAME
Utilize o seguinte comando para definir o SPN para o nome do computador que esteja a executar o SQL Server:
Setspn –A MSSQLSvc / FQDN_OF_SQLSERVER:port SQLSERVER_COMPUTER_NAME
Se o computador back-end com o SQL Server está a ser executado numa conta de domínio, o MSSQLSvc / FQDN_OF_SQL_SERVER:port número da porta tem de estar disponível para a conta de domínio. Utilize o seguinte comando para determinar o SPN para a conta de domínio:
Setspn –L domínio\utilizador
Utilize um dos seguintes comandos para definir o SPN para o nome do computador que esteja a executar o SQL Server:
  • Setspn –A MSSQLSvc / FQDN_OF_SQLSERVER:portFQDN_OF_SQLSERVER
  • Setspn –A MSSQLSvc / FQDN_OF_SQLSERVER:portdomain\username

O script de programa auxiliar SPN

Pode utilizar o seguinte script de exemplo para encontrar o SPN para uma aplicação do IIS. Também pode utilizar este script para localizar duplicado SPN. Para utilizar este script, siga estes passos:
  1. Clique em Iniciar, clique em Executar, escreva o Bloco de notas e, em seguida, clique em OK.
  2. In the Notepad file, paste the following script:
    Dim argSPN, argUser, argComputer, spnToSearch, objCategory, strFilter, searchCategory, domainInputFunction Help()Dim strMessagestrMessage = strMessage & "Usage:" & chr(13)strMessage = strMessage & "For accurate results run this script from the IIS server or a member server in the same domain as IIS server." & chr(13)strMessage = strMessage & "Check the article's failure scenarios and make sure no duplicate SPNs exist." & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:spn /spn:HTTP/www.test.com /user:mydomain\apppool1" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:spn /spn:HTTP/www.test.com /computer:iis6server1" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:user /user:mydomain\apppool1" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:computer /computer:iis6server1" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:duplicatespn /spn:HTTP/www.test.com" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:requiredspn" & chr(13)	MsgBox strMessage,,"SPN Helper"	WScript.QuitEnd FunctionFunction setArguments()	argSPN = lcase(WScript.Arguments.Named("spn"))	argUser =  lcase(WScript.Arguments.Named("user"))	argComputer = lcase(WScript.Arguments.Named("computer"))	searchCategory = lcase(WScript.Arguments.Named("f"))	if instr(argUser,"\")>0 then		domainInput = ",DC=" & split(argUser,"\")(0)		argUser = split(argUser,"\")(1)	end ifEnd FunctionFunction resetValues()	spnToSearch = ""	objCategory = ""	strFilter = ""End FunctionFunction getGCPath()	Dim tempGCPath, objGC, tempGC, tempStr	Set objGC = GetObject("GC:")	for each tempGC in objGC		tempGCPath = tempGC.ADsPath	next	if tempGCPath <> "" then		getGCPath = tempGCPath	else		WScript.Echo "Unable to find active directory"		WScript.Quit	end if	For tempCounter=0 to UBound(split(lcase(split(getGCPath,"//")(1)),"."))		If tempCounter = UBound(split(lcase(split(getGCPath,"//")(1)),".")) Then tempSeperator="" else tempSeperator = ","		tempStr = tempStr & "DC=" & split(lcase(split(getGCPath,"//")(1)),".")(tempCounter) & tempSeperator	Next	getGCPath = tempGCPath & "/" & tempStrEnd FunctionFunction getSPNClass()	Dim tempSPNClass	If trim(argSPN)="" Then getSPNClass = "*": Exit Function	If instr(argSPN,"/")=0 Then getSPNClass = "*": Exit Function	If instr(split(argSPN,"/")(0),"*")>0 Then getSPNClass = "*": Exit Function	getSPNClass = split(argSPN,"/")(0)End FunctionFunction isSPNInputValid(spnIN)	isSPNInputValid = ""	If instr(spnIN,"/")=0 Then Exit Function	If instr(spnIN,"*")>0 Then Exit Function	isSPNInputValid = spnINEnd FunctionFunction Main()	Dim paramSPN	paramSPN = ""	call  resetValues()	call setArguments()	Select Case searchCategory		Case "spn"			if (argUser = "" and argComputer = "") or (argUser <> "" and argComputer <> "") then WScript.Echo "You must use /spn along with /computer or /user": WScript.Quit			if argSPN = "" then argSPN = "*"			spnToSearch = "(servicePrincipalName=" & argSPN & ")"			if argUser <> "" then objCategory = "(objectCategory=person)(sAMAccountName=" & argUser & ")"			if argComputer <> "" then 				objCategory = "(objectCategory=computer)(cn=" & argComputer & ")"			End If			strFilter = "(&" & spnToSearch & objCategory & ")"		Case "duplicatespn"			If isSPNInputValid(argSPN)="" Then WScript.Echo "Invalid SPN input. Please verify and try again.": WScript.Quit			spnToSearch = "(servicePrincipalName=" & argSPN & ")"			strFilter = spnToSearch			paramSPN = argSPN		Case "requiredspn"			call showRequiredSPNs("IIS")			WScript.Quit		Case "computer"			objCategory = "(&(objectCategory=computer)(cn=" & argComputer & "))"			strFilter = objCategory		Case "user"			objCategory = "(&(objectCategory=person)(sAMAccountName=" & argUser & "))"			strFilter = objCategory		Case else			call Help()			WScript.Quit	End Select	call getSPNs(paramSPN)End FunctionFunction getPingResult(hostName,errorMessage)'On Error Resume NextgetPingResult = ""	If instr(hostName,".")=0 Then		Dim tempGCPath, objGC, tempGC		Set objGC = GetObject("GC:")		for each tempGC in objGC			tempGCPath = tempGC.ADsPath		next		if tempGCPath <> "" then			gcPath = tempGCPath		else			WScript.Echo "Unable to find active directory"			WScript.Quit		end if		Set adConn = CreateObject("ADODB.Connection")		Set adCmd = CReateObject("ADODB.Command")		adConn.Provider = "ADsDSOObject"		adConn.Open "ADs Provider"		Set adCmd.ActiveConnection = adConn		adQuery = "<" + gcPath + ">;" & "(&(objectCategory=computer)(cn=" & hostName & "))" & ";dnsHostName;subtree"		'WScript.Echo adQuery		'WScript.Quit		adCmd.CommandText = adQuery		Set adRecordSet = adCmd.Execute		if adRecordSet.RecordCount>0 Then 			If IsNull(adRecordSet.Fields("dnsHostName"))=0 Then 				getPingResult = adRecordSet.Fields("dnsHostName") 				hostName = getPingResult 			Else 				getPingResult = hostName			End If		else 			errorMessage = "Could not find " & hostname & " in the active directory"		end if		Exit Function	End If	getPingResult = hostNameExit Function'If Err Then getPingResult = hostNameEnd FunctionFunction getSPNs(spn)	Dim spnClass, duplicateSPNArray	spnClass = getSPNClass()	duplicateSPNArray = ""	gcPath = getGCPath()	Set adConn = CreateObject("ADODB.Connection")	Set adCmd = CreateObject("ADODB.Command")	adConn.Provider = "ADsDSOObject"	adConn.Open "ADs Provider"	Set adCmd.ActiveConnection = adConn	adQuery = "<" + gcPath + domainInput + ">;" & strFilter & ";distinguishedName,objectCategory,dnsHostName,servicePrincipalName,sAMAccountName;subtree"	'WScript.Echo adQuery	'WScript.Quit	adCmd.CommandText = adQuery	Set adRecordSet = adCmd.Execute	if adRecordSet.EOF and adRecordSet.Bof Then		WScript.echo "No " & searchCategory & " found with the given criteria."	else		If adRecordSet.RecordCount>10 Then			If msgbox(adRecordSet.RecordCount & " Records are returned with the given criteria. Printing all of them might take a long time" & chr(13) & " Do you want to print all of them?",vbYesNo,"Kerberos")=vbNo Then Exit Function		End If		Do While not adRecordset.Eof			If Err Then Exit Do			WScript.echo "Class: " & split(split(adRecordSet.Fields("objectCategory"),",")(0),"=")(1)			WScript.Echo adRecordSet.Fields("distinguishedName")			if UCase(adRecordSet.Fields("objectCategory")) = "COMPUTER" Then				WScript.echo "Computer Name" & adRecordSet.Fields("dnsHostName")			else				WScript.echo "User Name: " & adRecordSet.Fields("samAccountName")			end if			if instr(searchCategory,"spn")>0 Then				spnCollection = adRecordSet.Fields("servicePrincipalName")				for each individualSPN in spnCollection					if spnClass="*" Then					WScript.Echo Chr(9) + individualSPN					else						Select Case searchCategory							Case "spn"								if Lcase(split(individualSPN,"/")(0)) = lcase(spnClass) Then									WScript.Echo Chr(9) + individualSPN								end if							Case "duplicatespn"								if Lcase(individualSPN) = lcase(spn) Then									duplicateSPNArray = duplicateSPNArray & Lcase(individualSPN) & " for " & split(split(adRecordSet.Fields("objectCategory"),",")(0),"=")(1) & ":" & adRecordSet.Fields("samAccountName") & Chr(29)								end if							Case "requiredspn"						End Select					End if				next			end if			WScript.Echo			adRecordSet.MoveNext		Loop		If searchCategory = "duplicatespn" Then			If UBound(Split(duplicateSPNArray,Chr(29)))>1 Then				WScript.Echo "Duplicate SPNs found"				For tempDuplicateCount=0 to UBound(Split(duplicateSPNArray,Chr(29)))-1					WScript.Echo Split(duplicateSPNArray,Chr(29))(tempDuplicateCount)				Next			End If		End If		WScript.Echo ""		If adRecordset.RecordCount>1 Then WScript.Echo "Found " & adRecordset.RecordCount & " accounts" Else WScript.Echo "Found " & adRecordset.RecordCount & " account"	end if	adRecordset.Close	adConn.Close	If Err Then MsgBox Err.MessageEnd FunctionFunction getCategoryCount(myFilterValue, myFilterCategory)'This function accepts 2 parameters. First paramenter is the filter value and second param is filter category.'If you want to pass in your own filter string with various categories, you can pass "" as the second param.	gcPath = getGCPath()	searchCategory = myFilterCategory	Select Case lcase(searchCategory)		Case "spn"			tempFilter = "(servicePrincipalName=" & myFilterValue & ")"		Case "user"			tempFilter = "(&(objectCategory=person)(sAMAccountName=" & myFilterValue & "))"		Case "computer"			tempFilter = "(&(objectCategory=computer)(cn=" & myFilterValue & "))"		Case else			tempFilter = myFilterValue	End Select	Dim tempCategoryCount	tempCategoryCount = 0	Set adConn = CreateObject("ADODB.Connection")	Set adCmd = CReateObject("ADODB.Command")	adConn.Provider = "ADsDSOObject"	adConn.Open "ADs Provider"	Set adCmd.ActiveConnection = adConn	adQuery = "<" + gcPath + domainInput + ">;" & tempFilter & ";objectCategory,dnsHostName,servicePrincipalName,sAMAccountName;subtree"	'WScript.Echo adQuery	'WScript.Quit	adCmd.CommandText = adQuery	Set adRecordSet = adCmd.Execute	if adRecordSet.EOF and adRecordSet.Bof Then	else		Do While not adRecordset.Eof			If Err Then Exit Do			if searchCategory = "spn" Then				spnCollection = adRecordSet.Fields("servicePrincipalName")				for each individualSPN in spnCollection					If lcase(individualSPN) = lcase(myFilterValue) Then						tempCategoryCount  = tempCategoryCount  + 1					End If				next			else				tempCategoryCount = tempCategoryCount + 1			end if   			adRecordSet.MoveNext		Loop	end if	getCategoryCount = tempCategoryCount	adRecordset.Close	adConn.CloseEnd FunctionFunction showRequiredSPNs(Product)	Select Case Product		Case "IIS"			If MsgBox("Is IIS running in a Cluster or NLB",vbYesNo)=vbYes Then 'Running in Cluster or NLB is true				strClusterName = InputBox("Enter the Cluster Name")				If strClusterName = "" Then WScript.Quit				If getPingResult(strClusterName,errorMessage)="" Then					If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit				End If				strDomainAccount = InputBox("Enter the Domain Account that the application pool is running under")				If strDomainAccount = "" Then WScript.Quit				strRequiredSPN = "HTTP/" & strClusterName				If instr(strDomainAccount,"\") > 0 then					If getCategoryCount(split(strDomainAccount,"\")(1), "user")=0 Then						WScript.Echo "Domain account " & strDomainAccount & " does not exist"						WScript.Quit					End If				Else					If getCategoryCount(strDomainAccount, "user")=0 Then						WScript.Echo "Domain account " & strDomainAccount & " does not exist"						WScript.Quit					End If				End If				If getCategoryCount(strRequiredSPN, "spn")>0 Then					WScript.Echo "SPN " & " is already set. Use search option for finding the account that it is set for"					WScript.Quit				End If				WScript.Echo "You need to set the SPN " & strRequiredSPN & " for domain account " & strDomainAccount			Else				If MsgBox("Is IIS application pool running under domain account",vbYesNo)=vbYes Then 					strHostName = InputBox("Enter the hostname or host header or FQDN that you use to access the application")					If strHostName = "" Then WScript.Quit					If getPingResult(strHostName,errorMessage)="" Then						If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit					End If					strDomainAccount = InputBox("Enter the Domain Account that the application pool is running under")					If strDomainAccount = "" Then WScript.Quit					If instr(strDomainAccount,"\") > 0 then						If getCategoryCount(split(strDomainAccount,"\")(1), "user")=0 Then							WScript.Echo "Domain account " & strDomainAccount & " does not exist"							WScript.Quit						End If					Else						If getCategoryCount(strDomainAccount, "user")=0 Then							WScript.Echo "Domain account " & strDomainAccount & " does not exist"							WScript.Quit						End If					End If					strRequiredSPN = "HTTP/" & strHostName					If getCategoryCount(strRequiredSPN, "spn")>0 Then						WScript.Echo "SPN " & strSPNRequired & " is already set. Use search option for finding the account that it is set for"						WScript.Quit					Else						WScript.Echo "You need to set SPN " & strRequiredSPN & " for domain account " & strDomainAccount						WScript.Quit					End If				Else					strHostName = InputBox("Enter the host header or FQDN that you use to access the application")					If strHostName = "" Then WScript.Quit					If getPingResult(strHostName,errorMessage)="" Then						If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit					End If					If MsgBox("Are you accessing the application with netbios name or FQDN or CNAME alias of IIS server?",vbYesNo)=vbYes Then						strRequiredSPN = "host/" & strHostName						If getCategoryCount(strRequiredSPN, "spn")>0 Then							WScript.Echo "Required SPN " & strRequiredSPN & " is already set. Use search option for finding the account that it is set for"							WScript.Quit						Else							WScript.Echo "You need to set SPN " & strRequiredSPN & " for IIS server's netbios name"							WScript.Quit						End If					End If					strHostHeader = InputBox("Enter the host header that you use to access the application")					If strHostHeader = "" Then WScript.Quit					strRequiredSPN = "http/" & strHostHeader					If getCategoryCount(strSPNRequired, "spn")>0 Then						WScript.Echo "A required SPN " & strSPNRequired & " is already set. Use search option to find the account the SPN is set to. If the required SPN is found under a different account, remove and add it to the IIS server's machine account."						WScript.Quit					Else						WScript.Echo "You need to set SPN " & strRequiredSPN & " for IIS server's netbios name"						WScript.Quit					End If				End If							End If		Case Else			call Help()	End SelectEnd Functioncall Main()'
  3. Guarde o ficheiro como Spnhelper.vbs.
  4. Numa linha de comandos, execute o ficheiro Spnhelper.vbs utilizando a opção da linha de comandos adequada.

    Nota Para ver as opções da linha de comandos para o ficheiro Spnhelper.vbs, escreva Spnhelper.vbs/help numa linha de comandos e prima ENTER.

Considerações adicionais

A autenticação Kerberos poderá falhar quando o SPN necessário está definida para as contas de computador ou para as contas de domínio. Se a autenticação Kerberos falhar inesperadamente, proceda do seguinte modo:
  • Verifique se nenhuma SPN duplicado existe no catálogo global para um SPN.

    Por exemplo, se o SPN HTTP/www.test.com estiver definido para a conta myDomain\appPool1 e por conta myDomain\appPool2, um SPN duplicado existe apesar do SPN está definido para contas diferentes. Além disso, se o SPN HTTP/iis6server1.mydomain.com estiver definido para a conta myDomain\appPool1 e o SPN HTTP/iis6server1.mydomain.com também está associado com a conta de computador para o servidor, tem também um SPN duplicado. Pode ter um HOST SPN e um SPN de HTTP. O SPN de HTTP explícita substituirão implícito aquele que é abrangido na entrada de HOST. No entanto, se o URL que o utilizador escreve está associado com mais do que uma conta de utilizador ou com mais do que uma conta de computador, tem um duplicado SPN.
  • Certifique-se de que o SPN foram replicados para outros controladores de domínio.

    Problemas de replicação entre os controladores de domínio podem impedir que o SPN replicadas para outros controladores de domínio. Quando o SPN não é replicadas para outros controladores de domínio, a aplicação poderá não funcionar de alguns computadores cliente. Por exemplo, se o SPN HTTP/www.test.com estiver definido para a conta myDomain\appPool1 num controlador de domínio, o SPN HTTP/www.test.com pode não estar para a conta myDomain\appPool1 um segundo controlador de domínio se o SPN não foi replicado para o segundo controlador de domínio.

    Nota Por predefinição, a replicação demora 15 minutos.
  • Verifique se o servidor Web está configurado para suportar a autenticação Kerberos. Para efectuar este procedimento, certifique-se de que a definição da chave de NTAuthenticationProviders na metabase do IIS não foi alterada para NTLM. A predefinição é Negotiate, NTLM.
  • Verifique se o servidor ou serviço que está a delegar as credenciais é fidedigno para delegação.
  • Verifique se a conta qual o serviço está em execução é fidedigna para delegação.
  • No Active Directory, certifique-se de que a conta é sensível e não pode ser delegada está desmarcada para utilizadores que acedam a aplicação.
  • Se estiver a aceder a aplicação directamente através do servidor, certifique-se de que a caixa de verificação Security Check, o Loopback está desmarcada.Para obter mais informações sobre como verificar que a verificação do loopback está desactivada, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
    896861Recebe o erro 401.1 quando navega num Web site que utiliza autenticação integrada e é hospedado no IIS 5.1 ou IIS 6
  • Verifique se o cliente é um cliente Kerberos activado. Além disso, certifique-se de que a definição Activar autenticação integrada do Windows é activada no Internet Explorer. Para tal, clique em Opções da Internet no menu Ferramentas, clique no separador Avançadas e, em seguida, certifique-se de que a caixa de verificação Activar autenticação integrada do Windows é seleccionada.
  • Verifique se todos os computadores que fazem parte do processo de Kerberos tem resolução de nomes consistente e estão ligados por método fidedigno Kerberos. Por exemplo, verifique se os computadores envolvidos no processo de Kerberos estão na mesma floresta ou fazem parte de uma fidedignidade de Kerberos entre florestas.
  • Certifique-se de que o tamanho do token não exceda o valor é definido para a propriedade MaxTokenSize. Além disso, certifique-se de que o tamanho do pedido não exceda o valor é definido para a propriedade MaxFieldLength. Estes valores podem ser excedidos se os utilizadores que são parte do processo de Kerberos forem membros de vários grupos.
    920862Mensagem de erro quando um utilizador do Outlook Web Access tenta aceder a uma caixa de correio no Exchange Server 2003: “ HTTP 400 pedido incorrecto (cabeçalho de pedido demasiado longo) ”
  • Verifique se as políticas de segurança necessárias estão activadas quando configura contas de domínio para agrupamentos de aplicações. Para o fazer, verifique se a conta de domínio é membro das seguintes políticas de segurança local no computador que está a executar o IIS:
    • Ajustar quotas de memória para um processo
    • Início de sessão como um serviço
    • Substituir um token de nível de processo
  • Verifique se a autenticação Kerberos está a funcionar correctamente através de UDP. Por predefinição, A autenticação Kerberos utiliza o UDP. No entanto, a perda de pacotes UDP pode causar a autenticação Kerberos falhar. Quando este problema ocorre, pode forçar a autenticação Kerberos para utilizar TCP. Para obter mais informações sobre como forçar a autenticação Kerberos para utilizar TCP, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
    244474Como forçar o Kerberos a utilizar TCP em vez de UDP no Windows Server 2003, no Windows XP e no Windows 2000
  • Certifique-se de que o carimbo de data / hora o autenticador não difira mais de cinco minutos do carimbo de data / hora do servidor. Para obter mais informações sobre como resolver as diferenças de carimbo de data/hora, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
    232386Não é possível iniciar sessão se não estiverem sincronizados data e hora
  • Certifique-se de que TCP/UDP porta 88 não é bloqueada por um firewall ou router. Por predefinição, A autenticação Kerberos utiliza a porta TCP/UDP 88.
  • Verifique se o ambiente de modo do domínio é pelo menos num ambiente de modo nativo do Microsoft Windows 2000. Para mais informações sobre como determinar o modo de domínio, visite o seguinte Web site da Microsoft:
  • No cliente, certifique-se de que o URL para a aplicação Web é adicionado aos sites da intranet local. Para obter mais informações sobre como adicionar um URL à intranet local, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
    303650Site da intranet é identificado como um site da Internet quando utiliza um FQDN ou um endereço IP
  • Verifique se cada dispositivo de ethernet gigabit está a utilizar a versão mais recente do controlador. Para obter mais informações sobre problemas que podem ocorrer quando os controladores para dispositivos de Ethernet gigabit estão desactualizados, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
    326152Não é possível ligar ao controlador de domínio e não é possível aplicar a política de grupo com dispositivos Gigabit Ethernet
Referências
Para mais informações sobre como utilizar a autenticação Kerberos com Web sites com balanceamento de carga, visite o seguinte Web site da Microsoft:Para obter mais informações sobre problemas que podem ocorrer quando utiliza a autenticação Kerberos com servidores proxy, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
321728Internet Explorer não suporta a autenticação Kerberos com servidores proxy
Para obter mais informações sobre como configurar o IIS para suportar o protocolo Kerberos e o protocolo NTLM para autenticação de rede, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
215383Como configurar o IIS para suportar o protocolo Kerberos e o protocolo NTLM para autenticação de rede
Para obter mais informações sobre como configurar um servidor virtual do Windows SharePoint Services para utilizar a autenticação Kerberos e como mudar da autenticação Kerberos novamente para a autenticação NTLM, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
832769Como configurar um servidor virtual do Windows SharePoint Services para utilizar a autenticação Kerberos e como mudar da autenticação Kerberos novamente para a autenticação NTLM
Para obter mais informações sobre problemas que podem ocorrer quando utiliza o protocolo de autenticação Kerberos para ligar a um servidor Web que utiliza uma porta não padrão no Windows XP ou Windows Server 2003, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
908209Internet Explorer 6 não é possível utilizar o protocolo de autenticação Kerberos para ligar a um servidor Web que utiliza uma porta não padrão no Windows XP ou Windows Server 2003

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 929650 - Última Revisão: 05/12/2010 22:02:25 - Revisão: 5.0

Microsoft Internet Information Services 7.5, Microsoft Internet Information Services 7.0, Microsoft Internet Information Services 6.0

  • kbmt kbinfo kbhowto KB929650 KbMtpt
Comentários