因此,我们有一个小应用程序,指向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而不会出现问题。只有当它包含在应用程序中时我们才会收到错误。
以前有人遇到过这个问题吗?
由于
答案 0 :(得分:2)
所以我相信你的webapp有一个自定义主机名而不是服务器名(如果我错了,请纠正我)。
首先需要验证的是该主机名是A Record还是CName。您可以对主机名执行ping操作并查看
答案 1 :(得分:1)
所以我确实找到了答案,这是双跳认证问题。
你可以在那里找到更好的描述,但基本上该站点尝试进行两次身份验证(一次到Web服务器,一次到SQL服务器)但是,Windows只会一次传递您的登录名和密码。之后,它只传递ID。
解决方案是您需要让应用程序的应用程序池使用启用Kerberos的ID,就像使用Load Balance时所需要的那样。