“目标主体名称不正确”401错误

时间:2016-09-06 16:43:48

标签: iis reporting-services ssrs-2008-r2

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

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

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

  

目标主体名称不正确说明:未处理   在执行当前Web请求期间发生异常。   请查看堆栈跟踪以获取有关错误的更多信息   它起源于代码。

     

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

     

来源错误:

     

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

     

堆栈追踪:

     

[Win32Exception(0x80004005):目标主体名称不正确]   System.Net.NTAuthentication.GetOutgoingBlob(Byte [] incomingBlob,   Boolean throwOnError,SecurityStatus& statusCode)+2622099
  System.Net.NTAuthentication.GetOutgoingBlob(String incomingBlob)+99
  System.Net.NegotiateClient.DoAuthenticate(String challenge,WebRequest   webRequest,ICredentials credentials,Boolean preAuthenticate)+767
  System.Net.NegotiateClient.Authenticate(String challenge,WebRequest   webRequest,ICredentials凭证)+18
  System.Net.AuthenticationManager.Authenticate(String challenge,   WebRequest请求,ICredentials凭据)+146
  System.Net.AuthenticationState.AttemptAuthenticate(HttpWebRequest的   httpWebRequest,ICredentials authInfo)+2279623
  System.Net.HttpWebRequest.CheckResubmitForAuth()+ 3031261
  System.Net.HttpWebRequest.CheckResubmit(Exception& e)+169

     

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

我们为SSRS服务器添加了一个新绑定名称的spn,用于运行应用程序的ID,但没有。

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

我们使用的ID可以完全访问这两个框,如果您可以直接从Web服务器转到SSRS而不会出现问题。只有当它包含在应用程序中时我们才会收到错误。

以前有人遇到过这个问题吗?

由于

2 个答案:

答案 0 :(得分:2)

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

首先需要验证的是该主机名是A Record还是CName。您可以对主机名执行ping操作并查看

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

答案 1 :(得分:1)

所以我确实找到了答案,这是双跳认证问题。

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

解决方案是您需要让应用程序的应用程序池使用启用Kerberos的ID,就像使用Load Balance时所需要的那样。