【问题标题】:AJAX Call to MVC Controller that Calls a WebService对调用 WebService 的 MVC 控制器的 AJAX 调用
【发布时间】:2023-04-08 20:34:01
【问题描述】:

我们正在开发一个纯粹使用 Windows 身份验证的内部 MVC3 应用程序。有一个视图对控制器操作执行 AJAX 调用,该操作在调用 Web 服务之前执行一些处理。我们遇到的问题是,如果匿名访问被关闭(如 Windows 身份验证打开),从控制器操作调用服务会导致 401:未经授权的错误。

我们遇到了双跳问题,在服务中调用服务时凭据未正确从服务器传递到服务器。我想知道 AJAX 调用是否在某种程度上模仿了相同的行为,并且没有将正确的 Windows 凭据传输到控制器,然后控制器不会将正确的凭据传递给 Web 服务。

我看过一些帖子,展示了如何在 jQuery 调用中传递用户名和密码,但没有提及,这是一种有效的方法,可以带来 Windows 身份验证。

有没有人遇到过类似的问题?我们宁愿不要在网络服务上留下匿名访问,因为它是我们希望控制访问的一些敏感数据。

【问题讨论】:

  • 我应该详细说明一下。我说的是在 Web 服务所在的虚拟目录上打开或关闭匿名访问。对 Web 应用程序进行 Windows 身份验证在所有情况下都可以正常工作。

标签: asp.net-mvc-3 web-services jquery controller windows-authentication


【解决方案1】:

您是否按照此问题的描述开启了身份模拟:

How to get Windows user name when identity impersonate="true" in asp.net?

【讨论】:

  • 在 MVC3 应用程序中,我们确实有: 在 web.config 中。我们在最初部署应用程序时确实想到了这一点,但没有任何改变。这是否也必须用于 Web 服务?或者这有关系吗?
  • 我猜你只需要 authentication = windows in the service,但我从来没有这样做过,所以我不确定。
  • 用户可以直接调用服务成功吗?
  • 他们可以,我相信它与 jQuery 调用凭据有关。
【解决方案2】:

一位同事在周末做了一些研究,并确定这可能与服务器上的 Kerberos 身份验证设置以及 jQuery 调用有关。为了解决这个问题,我们只是将 Web 服务重构为应用程序刚刚引用的库。我们最初将其设为 Web 服务,因为我们认为将来需要从其他应用程序访问这些数据。遇到这个问题,我们很可能会把它做成 NuGet 包。

感谢cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多