如何为报表服务器注册服务主体名称 (SPN)

如果要在使用 Kerberos 协议进行相互身份验证的网络中部署 Reporting Services,并且将报表服务器服务配置为以域用户帐户身份运行,则必须为报表服务器服务创建服务主体名称 (SPN)。此外,如果将域用户配置为服务帐户,则必须将报表服务器配置为使用 NTLM 身份验证。

关于 SPN

SPN 是服务在使用 Kerberos 身份验证的网络上的唯一标识符。它由服务类、主机名和端口组成。在使用 Kerberos 身份验证的网络中,必须在内置计算机帐户(如 NetworkService 或 LocalSystem)或用户帐户下为服务器注册 SPN。对于内置帐户,SPN 将自动进行注册。但是,如果在域用户帐户下运行服务,则必须为要使用的帐户手动注册 SPN。

若要创建 SPN,可使用 SetSPN 命令行实用工具。有关详细信息,请参阅 Microsoft Windows Server TechCenter 上的 Setspn Overview(Setspn 概述)。

您必须具有域管理员身份,才能在域控制器上运行该实用工具。

语法

使用 SetSPN 实用工具为报表服务器创建 SPN 的命令语法类似如下所示:

Setspn -a http/<computername>.<domainname>:<port> <domain-user-account>

SetSPN 随 Windows Server 2003 Service Pack 1 支持工具包提供,该工具包必须单独下载。-a 参数用于使用特定帐户注册服务主体名称。

HTTP 为服务类。报表服务器 Web 服务在 HTTP.SYS 中运行。在为 HTTP 创建 SPN 时,将同时对在 HTTP.SYS(包括承载在 IIS 中的应用程序)中运行的位于同一台计算机上的所有 Web 应用程序授予基于该域用户帐户的票证。如果这些服务在其他帐户下运行,则身份验证请求将失败。为避免此问题,请务必将所有 HTTP 应用程序配置为在同一帐户下运行,或考虑为每个应用程序创建主机头,然后为每个主机头单独创建一个 SPN。配置主机标头时,无论 Reporting Services 配置如何都必须更改 DNS。

您为 <计算机名称>、<域名> 和 <端口> 指定的值将标识承载报表服务器的计算机的唯一网络地址。此地址可以是本地主机名,或者完全限定的域名 (FQDN)。如果只有一个域且使用的是端口 80,则可以省略命令行中的 <域名> 和 <端口>。<域用户帐户> 是报表服务器服务运行时使用的用户帐户,也是必须注册 SPN 的用户帐户。

注意注意

注意:如果您在使用 Internet Explorer 和 Kerberos 身份验证,则建议您不要将该端口指定为命令行的一部分。有关详细信息,请参阅 Internet Explorer cannot use the Kerberos authentication protocol to connect to a Web site(Internet Explorer 无法使用 Kerberos 身份验证协议连接到网站)。

为域用户帐户注册 SPN

为以域用户身份运行的报表服务器服务注册 SPN

  1. 安装 Reporting Services 并将报表服务器服务配置为以域用户帐户身份运行。请注意,直到完成以下步骤之后,用户才能连接到报表服务器。

  2. 从下载中心下载并安装 Windows Server 2003 Service Pack 1 Support Tools(Windows Server 2003 Service Pack 1 支持工具)。

  3. 以域管理员的身份登录到域控制器。

  4. 打开命令提示符窗口。

  5. 复制以下命令,并用适用于您的网络的实际值替换占位符值。

    Setspn -a http/<computer-name>.<domain-name>:<port> <domain-user-account>
    
  6. 运行命令。

  7. 打开 RsReportServer.config 文件,找到 <AuthenticationTypes> 部分。添加 <RSWindowsNegotiate/> 作为该部分的第一个项,以启用 NTLM。