【问题标题】:401 Unauthorized when contacting ASP.NET web service from ASP.NET web application从 ASP.NET Web 应用程序联系 ASP.NET Web 服务时出现 401 Unauthorized
【发布时间】:2010-10-19 08:55:19
【问题描述】:

我有一个服务器(Windows 2003/IIS 6)。该服务器在 IIS 中有几个不同的“网站”设置。每个站点都在 IIS 中配置有不同的主机标头(端口 80)。此外,每个站点也可以通过指定的端口号访问(没有主机头)。

例如:

我的站点 1: http://apps.mysite1.com 要么 http://myserver:xxxx

我的站点2: http://something.mysite2.com 要么 http://myserver:yyyy

我已经编辑了我的主机文件(它是一台开发机器)以将每个站点的主机头重定向到本地机器(127.0.0.1)。

我在一个 IIS 站点 (mysite1) 中有一个 ASP.NET 2.0 网站,在另一个 IIS 站点 (mysite2) 中有一个 ASP.NET 2.0 Web 服务。该网站使用类似于以下的代码与 Web 服务进行通信:

MyWebService svc = new MyWebService();
//also have tried "http://myserver:yyyy/MyWebService.asmx" below
svc.Url = "http://something.mysite2.com/MyWebService.asmx"; 
svc.Credentials = System.Net.CredentialCache.DefaultCredentials;
svc.MyMethod();

所有站点都配置为使用 Windows 集成安全性,ASP.NET 配置为使用 进行 Windows 身份验证。安全模型规定,登录到 Web 应用程序的用户应该通过身份验证一直到 Web 服务(随后到底层数据库,但这不一定与此相关)。

我的工作正常,但是我重建了我的 Web 服务(新方法),现在任何以 401 Unauthorized 消息结尾的 Web 服务调用的结果都无法正常工作。

听起来确实像一个双跳问题。我相信这与 Web 服务不接受正在传递的凭据和挑战要传递的新凭据有关。只是不确定如何确认这一点。不知道为什么它会挑战 - 我以机器/域管理员身份登录,并且 IE 配置为在 Internet 选项 > 安全选项卡 > 自定义级别 > Intranet 区域中的自动登录中传递凭据。是的,相关站点已添加到我的“Intranet 区域”中。

解决此问题的最佳方法是什么?关于现在可能导致这种情况的任何想法?

TIA!

【问题讨论】:

    标签: asp.net web-services iis-6 windows-authentication


    【解决方案1】:

    这听起来像double-hop issue。为了确认是否是双跳问题,我将更改显示为svc.Credentials = 的行并明确输入凭据以进行测试,并查看它是否有效。如果它确实有效,那就是双跳问题,您需要解决它。

    【讨论】:

    • 是的,这也是我怀疑的。我不知道如何解决我想这是我的问题。
    • 这篇 kb 文章应该让您了解 Kerberos 委派。委托允许第二个 IIS 信任第一个。如果您使用用户凭据进行连接,您可能还需要在数据库服务器上执行此操作。 support.microsoft.com/kb/810572
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    相关资源
    最近更新 更多