Como um serviço registra os próprios SPNs
Antes que um cliente possa usar um SPN para autenticar uma instância de um serviço, o SPN deve ser registrado na conta de usuário ou computador que a instância de serviço usará para fazer logon. Normalmente, o registro do SPN é feito por um programa de instalação de serviço em execução com privilégios de administrador de domínio.
O instalador de serviço que instala uma instância de serviço em um computador host normalmente executa o procedimento a seguir.
Para registrar SPNs para uma instância de serviço
- Chame a função DsGetSpn para criar um ou mais SPNs exclusivos para a instância de serviço. Para obter mais informações, consulte Formatos de nome para SPNs exclusivos.
- Chame a função DsWriteAccountSpn para registrar os nomes na conta de logon do serviço.
DsWriteAccountSpn registra SPNs como uma propriedade de um objeto de conta de usuário ou computador no diretório. objetos de usuário e computador têm um atributo servicePrincipalName, que é um atributo de vários valores para armazenar todos os SPNs associados a uma conta de usuário ou computador. Se o serviço for executado em uma conta de usuário, os SPNs serão armazenados no atributo servicePrincipalName dessa conta. Se o serviço for executado na conta LocalSystem, os SPNs serão armazenados no atributo servicePrincipalName da conta do computador host do serviço. O chamador DsWriteAccountSpn deve especificar o nome distinto do objeto de conta sob o qual os SPNs são armazenados.
Para garantir que os SPNs registrados sejam seguros, o atributo servicePrincipalName não pode ser gravado diretamente, ele só pode ser gravado chamando DsWriteAccountSpn. O chamador deve ter acesso de gravação ao atributo servicePrincipalName da conta de destino. Normalmente, o acesso de gravação é concedido por padrão somente aos administradores de domínio. No entanto, há um caso especial em que o sistema permite que um serviço em execução sob a conta LocalSystem registre seus próprios SPNs na conta de computador do host do serviço. Nesse caso, o SPN que está sendo gravado deve ter o formato "classe> de serviço/<host" e "host>>"<< deve ser o nome DNS do computador local.
DsWriteAccountSpn também pode remover SPNs de uma conta. Um parâmetro de operação indica se os SPNs devem ser adicionados à conta, removidos da conta ou usados para substituir completamente todos os SPNs atuais da conta. Quando uma instância de serviço for desinstalada, remova todos os SPNs registrados para essa instância.
Para obter mais informações e um exemplo de código que registra ou cancela o registro de SPNs de um serviço, consulte Registrando os SPNs de um serviço.
Os serviços baseados em host que usam o formato SPN simples "<classe> de serviço/<host>", têm a opção de usar a função DsServerRegisterSpn, que cria e registra SPNs para uma instância de serviço. DsServerRegisterSpn é uma função auxiliar que chama DsGetSpn e DsWriteAccountSpn.
Para obter mais informações, consulte Contas de logon de serviço.