唯一 SPN 的名称格式

SPN 在注册它的林中必须是唯一的。 如果不是唯一的,身份验证将失败。 SPN 语法包含四个元素:两个必需元素和两个附加元素,如果需要,可以使用它生成下表中列出的唯一名称。

<service class>/<host>:<port>/<service name>
元素 说明
“<service class>” 标识常规服务类的字符串;例如,“SqlServer”。 有已知的服务类名称,例如 Web 服务的“www”或目录服务的“ldap”。 通常,这可以是服务类唯一的任何字符串。 请注意,SPN 语法使用正斜杠(/)分隔元素,因此此字符不能出现在服务类名称中。
“<host>” 运行服务的计算机的名称。 这可以是完全限定的 DNS 名称或 NetBIOS 名称。 请注意,无法保证 NetBIOS 名称在林中是唯一的,因此包含 NetBIOS 名称的 SPN 可能不是唯一的。
“<port>” 一个可选端口号,用于区分单个主计算机上的同一服务类的多个实例。 如果服务对其服务类使用默认端口,则省略此组件。
“<服务名称>” 副本 (replica)ble 服务的 SPN 中使用的可选名称,用于标识服务提供的数据或服务或服务提供的域。 此组件可以具有以下格式之一:
  • Active Directory 域服务中对象的可分辨名称或 objectGUID,例如服务连接点(SCP)。
  • 为整个域提供指定服务的服务的域的 DNS 名称。
  • SRV 或 MX 记录的 DNS 名称。

 

服务 SPN 中存在的组件取决于如何标识和副本 (replica)服务。 有两种基本方案:基于主机的服务和副本 (replica)ble 服务。

基于主机的服务

对于基于主机的服务,省略“服务名称>”<组件,因为服务由服务类和安装服务的主机计算机的名称唯一标识。

<service class>/<host>

仅服务类就足以标识服务提供的功能的客户端。 可以在许多计算机上安装服务类的实例,每个实例都提供使用其主计算机标识的服务。 FTP 和 Telnet 是基于主机的服务的示例。 如果服务使用非默认端口,或者主机上有多个服务实例,则基于主机的服务实例的 SPN 可以包含端口号。

<service class>/<host>:<port>

可复制服务

对于副本 (replica)ble 服务,服务可以有一个或多个实例(副本 (replica)),客户端不会区分它们连接到哪些副本 (replica),因为每个实例都提供相同的服务。 每个副本 (replica)的 SPN 具有相同的“服务类”<和“<服务名称>”组件,其中“服务名称>”<更具体地标识服务提供>的功能。 只有“主机>”<和可选的“端口>”<组件会从 SPN 更改为 SPN。

<service class>/<host>:<port>/<service name>

副本 (replica)ble 服务的一个示例是提供对指定数据库的访问权限的数据库服务的实例。 在这种情况下,“服务类>”<标识数据库应用程序,“<服务名称>”标识特定数据库。 “<服务名称>”可以是包含数据库的连接数据的服务连接点(SCP)的可分辨名称。

MyDBService/host1.example.com/CN=hrdb,OU=mktg,DC=example,DC=com
MyDBService/host2.example.com/CN=hrdb,OU=mktg,DC=example,DC=com
MyDBService/host3.example.com/CN=hrdb,OU=mktg,DC=example,DC=com

如果客户端将使用 NetBIOS 名称组成服务的 SPN,则每个副本 (replica)还必须注册包含 NetBIOS 名称的 SPN。

MyDBService/host1/CN=hrdb,OU=mktg,DC=example,DC=com
MyDBService/host2/CN=hrdb,OU=mktg,DC=example,DC=com
MyDBService/host3/CN=hrdb,OU=mktg,DC=example,DC=com

副本 (replica)ble 服务的另一个示例是向整个域提供服务。 在这种情况下,“服务名称>”<组件是所提供服务的域的 DNS 名称。 Kerberos KDC 是此类副本 (replica)ble 服务的示例。

请注意,如果计算机的 DNS 名称发生更改,系统将更新林中该主机的所有已注册 SPN 的“主机>”<元素。