唯一 SPN 的名称格式
SPN 在注册它的林中必须是唯一的。 如果不是唯一的,身份验证将失败。 SPN 语法包含四个元素:两个必需元素和两个附加元素,如果需要,可以使用它生成下表中列出的唯一名称。
<service class>/<host>:<port>/<service name>
元素 | 描述 |
---|---|
“<服务类>” | 标识常规服务类的字符串;例如,“SqlServer”。 有已知的服务类名称,例如 Web 服务的“www”或目录服务的“ldap”。 通常,这可以是服务类唯一的任何字符串。 请注意,SPN 语法使用正斜杠(/)分隔元素,因此此字符不能出现在服务类名称中。 |
“<主机>” | 运行服务的计算机的名称。 这可以是完全限定的 DNS 名称或 NetBIOS 名称。 请注意,无法保证 NetBIOS 名称在林中是唯一的,因此包含 NetBIOS 名称的 SPN 可能不是唯一的。 |
“<端口>” | 一个可选端口号,用于区分单个主计算机上的同一服务类的多个实例。 如果服务对其服务类使用默认端口,则省略此组件。 |
“<服务名称>” | 在可复制服务的 SPN 中使用的可选名称,用于标识服务提供的数据或服务,或者由服务提供服务的域。 此组件可以具有以下格式之一:
|
服务 SPN 中存在的组件取决于服务的标识和复制方式。 有两种基本方案:基于主机的服务和可复制的服务。
基于主机的服务
对于基于主机的服务,省略“<服务名称>”组件,因为服务由服务类和安装服务的主计算机的名称唯一标识。
<service class>/<host>
仅服务类就足以标识服务提供的功能的客户端。 可以在许多计算机上安装服务类的实例,每个实例都提供使用其主计算机标识的服务。 FTP 和 Telnet 是基于主机的服务的示例。 如果服务使用非默认端口,或者主机上有多个服务实例,则基于主机的服务实例的 SPN 可以包含端口号。
<service class>/<host>:<port>
可复制服务
对于可复制的服务,服务(副本)可以有一个或多个实例,客户端不会区分它们连接到的副本,因为每个实例都提供相同的服务。 每个副本的 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 的“<主机>”元素。