Как служба регистрирует свои имена субъектов-служб
Прежде чем клиент сможет использовать имя субъекта-службы для проверки подлинности экземпляра службы, имя субъекта-службы должно быть зарегистрировано в учетной записи пользователя или компьютера, в которую экземпляр службы будет использоваться для входа. Как правило, регистрация имени субъекта-службы выполняется программой установки службы, работающей с правами администратора домена.
Установщик службы, устанавливающий экземпляр службы на хост-компьютере, обычно выполняет следующую процедуру.
Регистрация имен субъектов-служб для экземпляра службы
- Вызовите функцию DsGetSpn, чтобы создать одну или несколько уникальных имен субъектов-служб для экземпляра службы. Дополнительные сведения см. в разделе "Форматы имен" для уникальных субъектов-служб.
- Вызовите функцию DsWriteAccountSpn, чтобы зарегистрировать имена в учетной записи входа в службу.
DsWriteAccountSpn регистрирует имена субъектов-служб в качестве свойства объекта учетной записи пользователя или компьютера в каталоге. Объекты пользователя и компьютера имеют атрибут servicePrincipalName, который является многозначным атрибутом для хранения всех имен субъектов-служб, связанных с учетной записью пользователя или компьютера. Если служба выполняется под учетной записью пользователя, имена субъектов-служб хранятся в атрибуте servicePrincipalName этой учетной записи. Если служба выполняется в учетной записи LocalSystem, имена субъектов-служб хранятся в атрибуте servicePrincipalName учетной записи хост-компьютера службы. Вызывающий объект DsWriteAccountSpn должен указать различающееся имя объекта учетной записи, в котором хранятся имена субъектов-служб.
Чтобы убедиться, что зарегистрированные имена субъектов-служб защищены, атрибут servicePrincipalName не может быть записан напрямую. Его можно записать только путем вызова DsWriteAccountSpn. Вызывающий объект должен иметь доступ на запись к атрибуту servicePrincipalName целевой учетной записи. Как правило, доступ на запись предоставляется только администраторам домена по умолчанию. Однако существует особый случай, когда система позволяет службе, работающей под учетной записью LocalSystem, зарегистрировать собственные имена субъектов-служб на учетной записи компьютера узла службы. В этом случае имя субъекта-службы должно иметь форму "класс> службы/<узел>" и "<<узел>" должен быть DNS-именем локального компьютера.
DsWriteAccountSpn также может удалять имена субъектов-служб из учетной записи. Параметр операции указывает, следует ли добавлять имена субъектов-служб в учетную запись, удаляться из учетной записи или полностью заменять все текущие имена субъектов-служб для учетной записи. При удалении экземпляра службы удалите все имена субъектов-служб, зарегистрированные для этого экземпляра.
Дополнительные сведения и пример кода, который регистрирует или отменяет регистрацию имени субъекта-службы, см. в разделе "Регистрация имен субъектов-служб для службы".
Службы на основе узлов, использующие простой формат имени субъекта-службы "<класс<> или узел>", имеют возможность использовать функцию DsServerRegisterSpn, которая создает и регистрирует имена субъектов-служб для экземпляра службы. DsServerRegisterSpn — это вспомогательной функцией, которая вызывает DsGetSpn и DsWriteAccountSpn.
Дополнительные сведения см. в разделе "Учетные записи входа в службу".