唯一 SPN 的名称格式

SPN 在注册它的林中必须是唯一的。 如果它不唯一,身份验证将失败。 SPN 语法有四个元素:两个必需元素和另外两个元素(如有必要)可用于生成下表中列出的唯一名称。

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

 

服务 SPN 中存在的组件取决于如何标识和复制服务。 有两种基本方案:基于主机的服务和可复制的服务。

基于主机的服务

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

<service class>/<host>

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

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

可复制服务

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

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

可复制服务的示例是提供对指定数据库的访问权限的数据库服务的实例。 在这种情况下,“服务类>”<标识数据库应用程序,“<服务名称>”标识特定数据库。 “<服务名称>”可以是服务连接点的可分辨名称, (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,则每个副本还必须注册包含 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

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

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