Partager via


Comment un service enregistre ses SPN

Pour qu’un client puisse utiliser un SPN pour authentifier un instance d’un service, il doit être inscrit sur le compte d’utilisateur ou d’ordinateur que le service instance utilisera pour se connecter. En règle générale, l’inscription du SPN est effectuée par un programme d’installation de service exécuté avec des privilèges d’administrateur de domaine.

Le programme d’installation du service qui installe un service instance sur un ordinateur hôte effectue généralement la procédure suivante.

Pour inscrire des noms de service pour un service instance

  1. Appelez la fonction DsGetSpn pour créer un ou plusieurs SPN uniques pour le service instance. Pour plus d’informations, consultez Formats de nom pour les noms de spn uniques.
  2. Appelez la fonction DsWriteAccountSpn pour inscrire les noms sur le compte d’ouverture de session du service.

DsWriteAccountSpn inscrit les noms de service en tant que propriété d’un objet de compte d’utilisateur ou d’ordinateur dans l’annuaire. les objets utilisateur et ordinateur ont un attribut servicePrincipalName , qui est un attribut à valeurs multiples permettant de stocker tous les SPN associés à un compte d’utilisateur ou d’ordinateur. Si le service s’exécute sous un compte d’utilisateur, les SPN sont stockés dans l’attribut servicePrincipalName de ce compte. Si le service s’exécute dans le compte LocalSystem, les SPN sont stockés dans l’attribut servicePrincipalName du compte de l’ordinateur hôte du service. L’appelant DsWriteAccountSpn doit spécifier le nom unique de l’objet de compte sous lequel les SPN sont stockés.

Pour garantir la sécurité des SPN inscrits, l’attribut servicePrincipalName ne peut pas être écrit directement ; il ne peut être écrit qu’en appelant DsWriteAccountSpn. L’appelant doit disposer d’un accès en écriture à l’attribut servicePrincipalName du compte cible. En règle générale, l’accès en écriture est accordé par défaut uniquement aux administrateurs de domaine. Toutefois, il existe un cas particulier dans lequel le système autorise un service s’exécutant sous le compte LocalSystem à inscrire ses propres SPN sur le compte d’ordinateur de l’hôte du service. Dans ce cas, le SPN en cours d’écriture doit avoir la forme «< classe>/<hôte> de service » et «< host> » doit être le nom DNS de l’ordinateur local.

DsWriteAccountSpn peut également supprimer des SPN d’un compte. Un paramètre d’opération indique si les SPN doivent être ajoutés au compte, supprimés du compte ou utilisés pour remplacer complètement tous les noms de service actuels pour le compte. Lorsqu’un service instance est désinstallé, supprimez tous les noms de service inscrits pour ce instance.

Pour plus d’informations et pour obtenir un exemple de code qui inscrit ou annule l’inscription des SPN d’un service, consultez Inscription des SPN pour un service.

Les services basés sur l’hôte qui utilisent le format SPN simple «< classe>/<hôte> de service » ont la possibilité d’utiliser la fonction DsServerRegisterSpn, qui crée et inscrit des noms de service pour un instance de service. DsServerRegisterSpn est une fonction d’assistance qui appelle DsGetSpn et DsWriteAccountSpn.

Pour plus d’informations, consultez Comptes d’ouverture de session du service.