【问题标题】:Current.User.Identity is empty when web service is calling another web service当 Web 服务正在调用另一个 Web 服务时 Current.User.Identity 为空
【发布时间】:2012-08-15 23:02:44
【问题描述】:

我对以下情况感到困扰:

我有一个用 C# 编写的 Web 服务(这是古老的符文。.NET 2.0,asmx 文件)。调用服务时,会使用 HttpContext.Current.User 等检查用户。调用需要使用 Active Directory 帐户完成。让当前用户认同这一点完全没有问题。

问题是这个 Web 服务在某个时候调用了另一个 Web 服务,但在第二个 Web 服务中 Current.User.Identity-object 是空的!?

为什么会这样,我该如何解决?

这两个服务都托管在带有 IIS 6 的 Server 2003 上。这两个服务都在启用了 Windows 身份验证的 ApplicationPools 上运行。

【问题讨论】:

  • 网络服务是否位于不同的机器上?

标签: .net web-services iis iis-6 .net-2.0


【解决方案1】:

很难用对古代符文的有限描述来判断,但我猜第一个服务设置为需要身份验证,而第二个服务不是。所以首先要看的是第二个服务是否允许匿名连接,如果是这样禁用它并且它可以解决。

一般来说,这不是保护 Web 服务的好方法,即使是古老的 ASMX 也是如此。

【讨论】:

  • 第二个服务允许并且需要允许匿名连接。为什么这不是保护 Web 服务的好方法?
  • 您在这里遇到的问题 - 由于基础设施问题,很容易出现不安全的事情。最好通过像需要肥皂头这样的事情来烘烤它。如果您需要更正式的安排,或者进入 WS-*。如果第二个服务应该是安全的,为什么它需要允许匿名访问?
  • 我没有自己写第二个服务。最初它只有 getter 方法。该服务仅用于获取一些数据,根本不操纵数据,因此很久以前有人决定允许匿名访问。现在有一个需求,第二个服务应该有一个方法来设置一些特定的数据,为此需要一个特定的访问级别(链接到 AD 帐户),第一个服务需要用一个方法扩展在某些时候需要使用第二个中的新方法。
  • 顺便说一句,感谢您的回答,非常感谢您的帮助。这是一个需要审查的旧系统。但这不会很快发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-27
  • 2011-02-16
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多