【问题标题】:"the target principal name is incorrect" 401 error“目标主体名称不正确” 401 错误
【发布时间】:2016-09-06 16:43:48
【问题描述】:

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

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

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

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

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

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

堆栈跟踪:

[Win32Exception (0x80004005): 目标主体名称不正确] System.Net.NTAuthentication.GetOutgoingBlob(Byte[]incomingBlob, 布尔 throwOnError、SecurityStatus 和 statusCode) +2622099
System.Net.NTAuthentication.GetOutgoingBlob(String incomingBlob) +99
System.Net.NegotiateClient.DoAuthenticate(字符串质询,WebRequest webRequest、ICredentials 凭据、布尔预验证)+767
System.Net.NegotiateClient.Authenticate(字符串质询,WebRequest webRequest、ICredentials 凭据)+18
System.Net.AuthenticationManager.Authenticate(字符串质询, 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) 未经授权。]

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

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

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

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

谢谢

【问题讨论】:

  • 我的回答祝你好运。如果你能告诉我你的发现会很有帮助。

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


【解决方案1】:

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

您需要验证的第一件事是此主机名是 A Record 还是 CName 。您可以对主机名执行 ping 操作并查看

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 嗨,我也有同样的问题;您能否具体说明一下您是如何解决这个问题的?
    • 回答这么晚了,但是您需要一个启用 kerberos 的 ID(与您的管理员交谈,他们应该知道如何创建一个)。然后只需在 appPool 中使用该 ID。这项工作实际上都在管理方面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    相关资源
    最近更新 更多