【问题标题】:Authentication from ASP.NET web app to ASP.NET web service to SQL Server从 ASP.NET Web 应用到 ASP.NET Web 服务到 SQL Server 的身份验证
【发布时间】:2023-03-11 23:30:01
【问题描述】:

我有一个使用 Windows 窗体身份验证的 ASP.NET (.NET 4.0) 应用程序。这会针对 Active Directory 进行身份验证并且工作正常。

此 Web 应用程序调用同一服务器上的 ASP.NET Web 服务 (.NET 4.0)。应用和服务都在 IIS 6 上运行。

Web 服务使用“Integrated Security=SSPI”作为连接字符串的一部分调用同一域中的 SQL Server 2005 数据库。

我希望网络服务和数据库连接使用网络应用的登录用户的凭据。

我已经尝试了几十个网站的几十个设置组合,但没有任何效果。我已经是第二天了,还没有到任何地方。

这可能吗?

在我最近的尝试中,我在调用网络服务之前在网络应用中添加了这段代码:

svc.Credentials = System.Net.CredentialCache.DefaultCredentials;

但在服务内部,User.Identity.Name 返回启动 Web 服务器的用户的值。

【问题讨论】:

  • 查看 support.microsoft.com/kb/306158 并尝试“在代码中模拟身份验证用户”中的代码,看看它是否适合您。
  • @NickBork:该方法需要授予 ASP.NET“作为操作系统的一部分运行”特权,甚至使其作为 SYSTEM(根的 NT 名称)运行。不确定这是否一切正常.

标签: asp.net sql-server web-services authentication


【解决方案1】:

您尝试执行的操作称为“委托”。这意味着最终用户已通过 Web 服务器进行身份验证,然后 Web 服务器尝试使用这些凭据来访问 SQL Server。但是 SQL Sever 不信任 Web 服务器,它只信任域控制器。所以请求失败。

除了不起作用之外,委托还有另一个缺点。因为每个用户将使用不同的凭据,SQL 连接将不再被池化。每个凭证都有自己的池。即使在用户数量很少的情况下,这也将是一个主要的资源消耗。

欲了解更多信息,请查看this MSDN article

TL;DR:放弃委派并转向 SQL 身份验证。

【讨论】:

  • 我可能只是转向 SQL 身份验证。但是,Web 服务仍然需要获取用户的凭据来确定要连接的 sql 用户。 Web 服务与 Web 应用程序在同一台服务器上运行,因此委托应该不是问题。
猜你喜欢
  • 2016-06-10
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
相关资源
最近更新 更多