Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iis &引用;目标主体名称不正确";401错误_Iis_Reporting Services_Ssrs 2008 R2 - Fatal编程技术网

Iis &引用;目标主体名称不正确";401错误

Iis &引用;目标主体名称不正确";401错误,iis,reporting-services,ssrs-2008-r2,Iis,Reporting Services,Ssrs 2008 R2,因此,我们有一个小应用程序,指向2008年SSRS服务器上的报告 此应用程序正常工作,但由于我们向服务器添加了更多网站,我们已将web应用程序绑定更改为非服务器名称的内容 这导致我们得到以下结果: 目标主体名称描述不正确:未处理 执行当前web请求期间发生异常。 请查看堆栈跟踪以了解有关错误和错误的更多信息 它起源于代码的地方 异常详细信息:System.ComponentModel.Win32异常:目标 主体名称不正确 源错误: 在执行过程中生成了未处理的异常 当前web请求。关于货物来源和位

因此,我们有一个小应用程序,指向2008年SSRS服务器上的报告

此应用程序正常工作,但由于我们向服务器添加了更多网站,我们已将web应用程序绑定更改为非服务器名称的内容

这导致我们得到以下结果:

目标主体名称描述不正确:未处理 执行当前web请求期间发生异常。 请查看堆栈跟踪以了解有关错误和错误的更多信息 它起源于代码的地方

异常详细信息:System.ComponentModel.Win32异常:目标 主体名称不正确

源错误:

在执行过程中生成了未处理的异常 当前web请求。关于货物来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常

堆栈跟踪:

[Win32Exception(0x80004005):目标主体名称不正确] System.Net.nAuthentication.GetOutgoingBlob(字节[]incomingBlob, 布尔throwOnError、SecurityStatus和statusCode)+2622099
System.Net.nAuthentication.GetOutgoingBlob(字符串incomingBlob)+99
System.Net.NegotiateClient.DoAuthenticate(字符串质询,WebRequest webRequest、ICredentials凭据、布尔预验证)+767
System.Net.NegotiateClient.Authenticate(字符串质询,WebRequest webRequest,ICredentials凭证)+18
System.Net.AuthenticationManager.Authentication(字符串质询, WebRequest请求,ICredentials凭证)+146
System.Net.AuthenticationState.AttemptAuthenticate(HttpWebRequest httpWebRequest,ICredentials authInfo)+2279623
System.Net.HttpWebRequest.CheckResubmitForAuth()+3031261
System.Net.HttpWebRequest.CheckResubmit(异常和e)+169

[WebException:远程服务器返回错误:(401) 未经授权。]

我们为运行应用程序的ID向SSRS服务器添加了新绑定名称的spn,但没有添加任何内容

我看到很多有SSPI问题的人这样做,但没有一个401错误

我们使用的ID可以完全访问这两个框,如果您可以直接从web服务器访问SSR,则不会出现问题。只有当它包装在应用程序中时,我们才会得到一个错误

以前有人碰到过这个问题吗


谢谢

所以我相信你的webapp有一个自定义的主机名而不是服务器名(如果我在这里错了,请纠正我)

首先需要验证的是这个主机名是记录还是CName。您可以对主机名执行ping并查看

  • 如果它首先解析为服务器名,然后解析为ip-CName。 在这种情况下,您不需要新的SPN,您需要确保原始SPN(具有计算机名的SPN)使用与应用程序池相同的标识
  • 如果直接解析为服务器IP,则需要SPN 您需要一个新的SPN,并且需要确保应用程序池标识和SPN标识相同。确保useAppPoolCredentials=true(IIS管理器->网站->配置编辑器->system.webServer/security/authentication/windowsAuthentication)

  • 所以我确实找到了答案,这是一个双跳身份验证问题

    您可以在那里找到更好的描述,但基本上站点会尝试两次身份验证(一次到web服务器,一次到SQL服务器),但是Windows只会传递一次您的登录名和密码。之后,它只传递ID


    解决方案是,您需要让应用程序的应用程序池使用启用Kerberos的ID,就像您使用负载平衡时需要的一样。

    我的答案是否正确。如果你能让我知道你的发现会很有帮助;请您具体说明一下您是如何修复的好吗?回答得这么晚,但您需要一个启用kerberos的Id(与管理员交谈,他们应该知道如何创建一个)。然后在appPool中使用该ID。这项工作实际上都在管理方面。